Rendimiento - Amazon Redshift

Rendimiento

Amazon Redshift logra una ejecución de consultas ultrarrápida gracias a las siguientes características de rendimiento.

Procesamiento masivo en paralelo

El procesamiento masivo en paralelo (MPP) permite una ejecución rápida de las consultas más complejas que funcionan en grandes cantidades de datos. Varios nodos de computación administran todo el procesamiento de consultas que dirige a la agregación de resultado final con cada núcleo de cada nodo que ejecuta los mismos segmentos de consulta compilados en partes de todos los datos.

Amazon Redshift distribuye las filas de una tabla entre los nodos informáticos para que los datos se puedan procesar en paralelo. Al seleccionar una clave de distribución adecuada para cada tabla, puede optimizar la distribución de datos para equilibrar la carga de trabajo y minimizar la transferencia de datos de un nodo a otro. Para obtener más información, consulte Elegir el modo de distribución recomendado.

La carga de datos de archivos sin formato aprovecha el procesamiento en paralelo mediante la distribución de la carga de trabajo entre varios nodos mientras lee varios archivos simultáneamente. Para obtener más información acerca de la carga de datos en las tablas, consulte Prácticas recomendadas de Amazon Redshift para la carga de datos.

Almacenamiento de datos en columnas

El almacenamiento en columnas para tablas de bases de datos reduce de forma drástica los requisitos generales de E/S de disco y es un factor importante en la optimización del rendimiento analítico de consultas. El almacenamiento de información de las tablas de bases de datos en forma de columnas reduce el número de solicitudes de E/S del disco y disminuye la cantidad de datos que necesita cargar del disco. Cargar menos datos en la memoria permite a Amazon Redshift realizar más procesamientos en memoria cuando se ejecutan consultas. Consulte Almacenamiento en columnas para obtener una explicación más detallada.

Cuando las columnas se ordenan adecuadamente, el procesador de consultas puede filtrar de forma rápida un subconjunto de bloques de datos grande. Para obtener más información, consulte Elección de la clave de clasificación recomendada.

Compresión de datos

La compresión de datos reduce los requisitos de almacenamiento, lo que permite disminuir la E/S del disco y mejorar el rendimiento de las consultas. Cuando se ejecuta una consulta, los datos comprimidos se leen en la memoria y luego se descomprimen durante la ejecución de la consulta. Cargar menos datos en la memoria permite a Amazon Redshift asignar más memoria al análisis de datos. Como el almacenamiento en columnas guarda los datos similares de forma secuencial, Amazon Redshift puede aplicar codificaciones de compresión adaptables que estén asociadas específicamente a los tipos de datos en columnas. La mejor forma de habilitar la compresión de datos en las columnas de las tablas es permitiendo que Amazon Redshift aplique las codificaciones de compresión óptimas cuando se carga la tabla con los datos. Para obtener más información acerca del uso de la compresión de datos automática, consulte Carga de tablas con compresión automática.

Optimizador de consultas

El motor de ejecución de consultas de Amazon Redshift incorpora un optimizador de consultas que tiene en cuenta el procesamiento masivo en paralelo (MPP) y también aprovecha el almacenamiento de datos orientado en columnas. El optimizador de consultas de Amazon Redshift implementa mejoras y extensiones importantes para procesar consultas de análisis complejas que suelen incluir uniones, consultas secundarias y agrupaciones de varias tablas. Para obtener más información acerca de la optimización de consultas, consulte ‎‎‎‎Ajuste del rendimiento de las consul‎tas‎.

Almacenamiento en caché de los resultados

Para reducir el tiempo de ejecución de las consultas y mejorar el rendimiento del sistema, Amazon Redshift almacena en caché los resultados de ciertos tipos de consultas en la memoria del nodo principal. Cuando un usuario envía una consulta, Amazon Redshift busca en la caché de resultados una copia válida de los resultados de la consulta. Si se encuentra alguna coincidencia en la caché de resultados, Amazon Redshift utiliza estos resultados almacenados en caché y no ejecuta la consulta. El almacenamiento en caché de los resultados es transparente para el usuario.

El almacenamiento en la caché de resultados está activado de forma predeterminada. Para deshabilitar el almacenamiento en la caché de resultados para la sesión actual, establezca el parámetro enable_result_cache_for_session en off.

Amazon Redshift utiliza los resultados almacenados en caché para una nueva consulta cuando se cumplen todas las condiciones siguientes:

  • El usuario que envía la consulta tiene permisos de acceso para los objetos utilizados en ella.

  • La tabla o las vistas de la consulta no se han modificado.

  • La consulta no utiliza una función que debe evaluarse cada vez que se ejecuta, como GETDATE.

  • La consulta no referencia las tablas externas de Amazon Redshift Spectrum.

  • Los parámetros de configuración que podrían afectar a los resultados de la consulta no se han modificado.

  • La consulta coincide sintácticamente con la consulta existente en la memoria caché.

Para maximizar la eficacia de la caché y la eficiencia en el uso de los recursos, Amazon Redshift no almacena en caché algunos conjuntos de resultados de consultas de gran tamaño. Amazon Redshift determina si va a almacenar en caché o no los resultados de las consultas en función de diferentes factores. Estos factores incluyen el número de entradas existentes en la memoria caché y el tipo de instancia del clúster de Amazon Redshift.

Para determinar si una consulta ha utilizado la caché de resultados, consulte la vista SVL_QLOG del sistema. Si una consulta ha utilizado la caché de resultados, la columna source_query devuelve el ID de la consulta de origen. Si no se ha utilizado la caché de resultados, el valor de la columna source_query es NULL.

En el siguiente ejemplo, se muestra que las consultas enviadas por userid 104 y userid 102 utilizan la caché de resultados de las consultas ejecutadas por userid 100.

select userid, query, elapsed, source_query from svl_qlog where userid > 1 order by query desc; userid | query | elapsed | source_query -------+--------+----------+------------- 104 | 629035 | 27 | 628919 104 | 629034 | 60 | 628900 104 | 629033 | 23 | 628891 102 | 629017 | 1229393 | 102 | 628942 | 28 | 628919 102 | 628941 | 57 | 628900 102 | 628940 | 26 | 628891 100 | 628919 | 84295686 | 100 | 628900 | 87015637 | 100 | 628891 | 58808694 |

Código compilado

El nodo principal distribuye el código compilado totalmente optimizado entre todos los nodos de un clúster. La compilación de consultas reduce los costos asociados con intérpretes y, por lo tanto, aumenta la velocidad de ejecución, en especial para consultas complejas. El código compilado se almacena en caché y se comparte entre las sesiones del mismo clúster. Como resultado, las futuras ejecuciones de la misma consulta serán más rápidas, a menudo incluso con parámetros diferentes.

El motor de ejecución de consultas compila código diferente para los protocolos de conexión JDBC y ODBC, de este modo, dos clientes que utilicen protocolos diferentes incurren por separado en el costo inicial de compilación del código. Los clientes que usan el mismo protocolo, sin embargo, se beneficiarán del uso compartido del código en caché.