Entendiendo el buffering de filas
El almacenamiento en búfer de filas AE puede aumentar el rendimiento. Dado que los EAs se ejecutan en un proceso OS separado, una parte significativa de la sobrecarga de rendimiento puede ser el coste de la transferencia de datos de fila entre el proceso NPS y un proceso EA.
Este coste de rendimiento se ve afectado por la cantidad bruta de datos transferidos y por el número de viajes de ida y vuelta de datos entre el sistema NPS y un AE. El coste de rendimiento se debe a que un gran número de cambios de contexto de procesos del sistema operativo puede resultar caro.
Una forma de reducir este coste en una aplicación es poner más información en cada fila, creando filas de mayor tamaño. Este enfoque puede ser útil para EAs llamadas desde cualquier tipo de función SQL. Tenga en cuenta, sin embargo, que el tamaño de fila del sistema Netezza está limitado a 64K bytes.
Otra forma de mejorar el rendimiento es utilizar el búfer de filas AE. Esta funcionalidad sólo puede utilizarse para EAs invocados a través de funciones de tabla SQL. El almacenamiento en búfer de filas AE es más útil cuando se introducen o envían un gran número de filas pequeñas. Cuando se activa, el AE coloca automáticamente filas en un búfer y sólo transmite el búfer entre el sistema NPS y el AE cuando se llena o se llega al final de los datos. El almacenamiento en búfer de las filas AE puede establecerse tanto para las filas de entrada como para las de salida (almacenamiento en búfer completo) o sólo para las filas de salida (almacenamiento en búfer B sólo del resultado).
El tamaño del búfer es un detalle de implementación interno del sistema Netezza. Es lo suficientemente grande como para ser útil, pero no tanto como para que una sola función abuse de los recursos de memoria. La implicación es que el almacenamiento en búfer de filas aumenta el rendimiento con registros más pequeños (de aproximadamente menos de 1000 bytes) y disminuye el rendimiento con registros más grandes.
SELECT t.col1, f.result from mytable t, table WITH
final(mytablefunction(t.col1)) f;Cuando no se utiliza el búfer de filas AE, la salida f.result siempre corresponde a la entrada t.col1 que la produjo. El uso del búfer de filas AE significa que esta correspondencia se pierde en la salida. Hay muchos escenarios de aplicación donde esta correspondencia no es necesaria., sin embargo, si es necesario, una posible solución es hacer que la función de tabla devuelva tanto el resultado como la entrada que lo produjo para que los valores se correspondan.
El almacenamiento en búfer de filas AE se controla mediante la variable de entorno AE NZAE_ROW_BUFFER. Para más información, véase Búfer de filas.