Vistas materializadas de Amazon Redshift le permiten mejorar significativamente el rendimiento de consultas complejas que se ejecutan con frecuencia como parte de sus aplicaciones de extracción, carga y transformación (ELT), inteligencia comercial (BI) o tableros. Las vistas materializadas precalculan y almacenan los conjuntos de resultados de la consulta SQL en la definición de la vista. Las vistas materializadas aceleran el acceso a los datos, porque la consulta no necesita volver a ejecutar el cálculo cada vez que se ejecuta la consulta, lo que también reduce el consumo de recursos.
Desplazamiento al rojo de Amazon tiene la capacidad de reescribir automáticamente sus consultas SQL que no hacen referencia explícita a las vistas materializadas existentes para usar una vista materializada existente si mejorará el rendimiento. Esta característica es valiosa y, en algunos casos, la única opción para optimizar el rendimiento. Considere aplicaciones ISV empaquetadas o incluso solo informes: los usuarios a menudo no tienen acceso al SQL para optimizar. En algunos casos, incluso si tienen acceso, el código o script es tan antiguo que nadie está familiarizado con él y no sabe qué regresiones podría introducir incluso un pequeño cambio.
En esta publicación, describimos cómo funciona la función de reescritura automática de consultas y algunos escenarios en los que podría aprovechar esta función. Para obtener información sobre la función de vista materializada en sí, consulte Acelere sus consultas de ELT y BI con las vistas materializadas de Amazon Redshift y Creación de vistas materializadas en Amazon Redshift.
Todos los ejemplos de esta publicación se ejecutan en un clúster ra8xlarge de 3.4 nodos con el Conjunto de datos de referencia en la nube TPC-DS de 3 TB.
Veamos tres escenarios diferentes en los que la función de reescritura automática de consultas podría ayudar: optimizar uniones entre dos tablas grandes, optimizar uniones para tablas que tienen múltiples rutas de unión y optimizar exploraciones de tablas.
Optimice las uniones entre dos tablas grandes
Hay muchas situaciones en las que tiene dos mesas grandes que se unen con frecuencia. En este caso, crear una vista materializada que una estas dos tablas podría ayudar a mejorar el rendimiento de esas consultas. Las vistas materializadas precalculan la unión y almacenan los resultados para que las ejecuciones posteriores solo necesiten recuperar los resultados guardados; no es necesario ejecutar los costosos JOIN cada vez. Con la reescritura automática de consultas, ninguna de las consultas del usuario final debe modificarse para hacer referencia a la vista materializada. Al crear el plan de explicación para la consulta, Amazon Redshift reemplaza la unión entre las dos tablas con la vista materializada.
De forma predeterminada, la reescritura automática de consultas usa una vista materializada solo si está actualizada y refleja todos los cambios de sus tablas base. Esto significa que la consulta no se vuelve a escribir para usar la vista materializada si las tablas base tienen actualizaciones más recientes que aún no se reflejan en la vista materializada.
Por ejemplo, considere la siguiente consulta SQL. La consulta une dos tablas: store_sales
(8,639,936,081 filas) y customer
(30,000,000 filas):
La consulta se ejecuta en 545,520 milisegundos; el siguiente es el plan de explicación para la consulta:
Vamos a crear una vista materializada que calcule previamente la unión entre el store_sales
y customer
tablas utilizando la siguiente instrucción SQL:
Ahora volvamos a ejecutar la consulta original:
La consulta se ejecuta mucho más rápido (46,493 milisegundos). Esto se debe a la función de reescritura automática de consultas, que ha reescrito la consulta anterior para usar la vista materializada recién creada en lugar de unir ambas tablas. El plan de explicación para esta consulta muestra este cambio:
La ejecución de la consulta original también consumió 1,263 segundos de CPU y leyó 45,013 898 bloques de datos, mientras que la consulta que se ejecutó después de la creación de la vista materializada solo consumió 29,256 segundos de CPU y leyó 29 35 bloques. Eso es una reducción del XNUMX% en el consumo de CPU y del XNUMX% en los bloques leídos.
El optimizador también puede reescribir la siguiente consulta para usar la vista materializada creada previamente, que incluye la unión adicional a la customer_address
mesa:
Optimice las uniones para tablas que tienen múltiples rutas de unión
Para tablas grandes en Amazon Redshift, el estilo de distribución ideal sería 'KEY', siendo la clave de distribución la columna que se usa con más frecuencia en la cláusula JOIN. Hay situaciones en las que algunas tablas grandes tienen varias rutas de combinación. El 50% de las consultas pueden usar una columna en particular para unirse a la tabla, y el otro 50% de las consultas pueden usar una columna diferente para unirse a la tabla. Ambos tipos de consultas son importantes y tienen requisitos de rendimiento estrictos. En este caso, podría elegir una columna como clave de distribución para la tabla y luego crear una vista materializada con la segunda columna como clave de distribución. Esto es posible porque las vistas materializadas pueden tener su propia distribución y claves de clasificación.
He aquí un ejemplo para ilustrar cómo funciona esto.
La web_sales
tabla (2,159,968,881 filas) tiene la clave de distribución ws_order_number
. Esto ayuda a optimizar la mayoría de las consultas (el 70 % de las uniones a esta tabla usan ws_order_number
como la columna de unión). El 30% restante utiliza la columna ws_bill_customer_sk
para unirse a la tabla, como se muestra en la siguiente instrucción SQL. Esta consulta tardó 12,790 XNUMX milisegundos en ejecutarse.
Podemos crear la vista materializada para ayudar a mejorar el rendimiento del 30 % restante de las consultas. Tenga en cuenta la palabra clave DISTKEY en el siguiente código. Hemos definido una nueva clave de distribución para la vista materializada (ws_bill_customer_sk
):
Volver a ejecutar la siguiente consulta devuelve filas mucho más rápido que antes (7,715 milisegundos frente a 12,790 XNUMX milisegundos):
Nuevamente, el plan de explicación de la consulta ha cambiado; ahora hace referencia a la vista materializada aunque la instrucción SQL no hace referencia explícita a la vista materializada:
Optimizar escaneos de tablas
Los escaneos de tablas en Amazon Redshift se hacen eficientes mediante el uso de claves de ordenación. Las claves de clasificación determinan el orden en que se almacenan las columnas en los bloques de datos. Elegir una columna que aparece con frecuencia en sus condiciones de filtrado como clave de clasificación puede mejorar significativamente el rendimiento de la consulta.
Las claves de ordenación compuestas con varias columnas se pueden definir en su tabla en caso de que varias columnas sean buenas candidatas para claves de ordenación. Pero en algunas situaciones en las que dos o más columnas de alta cardinalidad son candidatas a clave de ordenación, es posible que la clave de ordenación compuesta no proporcione un rendimiento adecuado. En estos casos, se podría crear una vista materializada con una clave de clasificación diferente para mantener esos datos en un orden de clasificación alternativo para ayudar a atender un subconjunto de las consultas.
En la siguiente consulta de ejemplo, el web_sales
la tabla usa la columna ws_sold_date_sk
para la clave de ordenación, porque esta es la columna que se usa comúnmente para filtrar filas. Un conjunto más pequeño de uso de consultas ws_sales_price
para filtrar filas. Dado que ambos ws_sold_date_sk
y ws_sales_price
son columnas de alta cardinalidad con muchos valores únicos, es posible que una clave de ordenación compuesta con ambas columnas no funcione para todos los patrones de consulta.
Creemos la siguiente vista materializada y veamos cómo puede ayudar a mejorar el rendimiento de la consulta anterior:
Ejecutar la siguiente consulta devuelve filas mucho más rápido (5 milisegundos frente a 3,548 milisegundos) porque la reescritura automática de consultas utiliza la vista materializada:
El siguiente es el nuevo plan de explicación:
Conclusión
Las vistas materializadas en Amazon Redshift pueden ser una poderosa herramienta de optimización si se usan adecuadamente. Con la reescritura automática de consultas, puede optimizar las consultas sin ningún impacto para los usuarios finales o sus consultas. Esto le permite crear vistas materializadas después de que la aplicación se haya puesto en marcha. Algunos clientes planifican esto como parte de su estrategia de optimización del rendimiento al crear nuevas aplicaciones. El valor real es que puede optimizar consultas y cargas de trabajo sin necesidad de modificar el código fuente o los scripts, y puede beneficiarse incluso con una coincidencia parcial.
Acerca de los autores
Harshida Patel es Arquitecto Sr. Especialista en Soluciones, Análisis con AWS.
Jeetesh Srivastva es gerente sénior, arquitecto especialista en soluciones en AWS. Se especializa en Amazon Redshift y trabaja con los clientes para implementar soluciones escalables mediante Amazon Redshift y otros servicios analíticos de AWS. Ha trabajado para ofrecer soluciones analíticas locales y basadas en la nube para clientes en sectores verticales de la industria bancaria, financiera y hotelera.
San Das es un arquitecto de soluciones especializado en análisis en AWS y ayuda a los clientes a crear soluciones en la nube escalables que ayuden a convertir los datos en información procesable.
Somdeb Bhattacharjee es arquitecto de soluciones empresariales en AWS.