Rendimiento de Amazon Redshift
En este tema se describen los componentes de Amazon Redshift que impulsan el rendimiento. Comprender estos componentes lo ayudará a ajustar el rendimiento y a solucionar problemas de rendimiento deficiente con Amazon Redshift.
Amazon Redshift logra una ejecución de consultas ultrarrápida gracias a las siguientes características de rendimiento.
Temas
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. Para obtener más información, consulte Almacenamiento en columnas.
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 consultas.
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é.