Uso de la vista SVL_QUERY_SUMMARY - Amazon Redshift

Uso de la vista SVL_QUERY_SUMMARY

Para analizar la información resumida de una consulta por secuencia con SVL_QUERY_SUMMARY, haga lo siguiente:

  1. Ejecute la siguiente consulta para determinar el ID de su consulta:

    select query, elapsed, substring from svl_qlog order by query desc limit 5;

    Examine el texto truncado de la consulta en el campo substring para determinar qué valor de query representa su consulta. Si ejecutó la consulta más de una vez, utilice el valor query de la fila con el valor de elapsed más bajo. Esa es la fila de la versión compilada. Si ha ejecutado distintas consultas, puede aumentar el valor que utilizó la cláusula LIMIT para asegurarse de que su consulta esté incluida.

  2. Seleccione las filas de SVL_QUERY_SUMMARY para su consulta. Ordene los resultados por secuencia, segmento y paso:

    select * from svl_query_summary where query = MyQueryID order by stm, seg, step;

    A continuación se muestra un resultado de ejemplo.

    Un resultado de ejemplo de las filas de SVL_QUERY_SUMMARY que coinciden con una consulta determinada.
  3. Haga corresponder los pasos con las operaciones del plan de consulta utilizando la información en Mapeo entre el plan de consulta y el resumen de la consulta. Tienen que tener, aproximadamente, los mismos valores de filas y de bytes (filas * ancho del plan de consulta). En caso de no coincidir, consulte Faltan estadísticas de tablas o están desactualizadas para conocer las soluciones recomendadas.

  4. Controle si el campo is_diskbased tiene el valor t ("true") para algún paso. Hash, aggregate y sort son los operadores que, probablemente, se guarden en el disco si el sistema no tiene suficiente memoria asignada para el procesamiento de consultas.

    Si is_diskbased tiene el valor "true", consulte Memoria insuficiente asignada a la consulta para conocer las soluciones recomendadas.

  5. Controle los valores del campo label y vea si hay una secuencia AGG-DIST-AGG en alguna parte de los pasos. Si dicha secuencia está presente, esto indica que hay una agregación de dos pasos, que es costosa. Para reparar esto, cambie la cláusula GROUP BY para utilizar la clave de distribución (la primera clave, si hay varias).

  6. Revise el valor de maxtime de cada segmento (es el mismo en todos los pasos del segmento). Identifique el segmento con el valor más alto de maxtime y revise los pasos en este segmento para los siguientes operadores.

    nota

    Un valor elevado de maxtime no indica necesariamente un problema con el segmento. Más allá de que el valor sea elevado, es posible que el segmento no haya tardado mucho tiempo en procesarse. Todos los segmentos de una secuencia comienzan a programarse al mismo tiempo. Sin embargo, es posible que algunos segmentos posteriores no se puedan ejecutar hasta obtener datos de los segmentos anteriores. Es posible que este efecto haga parecer que hayan tardado mucho tiempo porque su valor de maxtime incluye tanto su tiempo de espera como su tiempo de procesamiento.

    • BCAST o DIST: en estos casos, el valor elevado de maxtime puede resultar de la redistribución de una gran cantidad de filas. Para conocer las soluciones recomendadas, consulte Distribución de datos poco óptima.

    • HJOIN (hash join): si el paso en cuestión tiene un valor muy elevado en el campo rows en comparación con el valor de rows en el paso final RETURN de la consulta, consulte Combinación hash para conocer las soluciones recomendadas.

    • SCAN/SORT: busque una secuencia SCAN, SORT, SCAN, MERGE de pasos justo antes de un paso de combinación. Este patrón indica que los datos desordenados se examinan, ordenan y, luego, fusionan con el área ordenada de la tabla.

      Advierta si el valor de rows del paso SCAN tiene un valor muy elevado en comparación con el valor de rows del paso final RETURN de la consulta. Este patrón indica que el motor de ejecución está examinando filas que, luego, se descartan, lo cual es poco eficiente. Para conocer las soluciones recomendadas, consulte Predicado poco restrictivo.

      Si el valor de maxtime del paso SCAN es elevado, consulte Cláusula WHERE poco óptima para conocer las soluciones recomendadas.

      Si el valor de rows del paso SORT no es cero, consulte Filas desordenadas o mal ordenadas para conocer las soluciones recomendadas.

  7. Revise los valores de rows y de bytes de los pasos 5 a 10 anteriores al paso final RETURN para hacerse una idea de la cantidad de datos que se devuelven al cliente. Este proceso puede ser un arte en sí mismo.

    Por ejemplo, en el siguiente resumen de consulta de ejemplo, el tercer paso PROJECT proporciona un valor de rows, pero no un valor de bytes. Si analiza los pasos anteriores para buscar uno con el mismo valor de rows, encontrará que el paso SCAN proporciona información relacionada con filas y bytes.

    Lo que sigue es un ejemplo de resultado.

    Una fila del resumen de la consulta da como resultado un paso de SCAN con información de filas y de bytes.

    Si devuelve un volumen de datos excepcionalmente grande, consulte Conjunto de resultados muy grande para conocer las soluciones recomendadas.

  8. Vea si el valor de bytes es elevado en comparación con el valor de rows para cualquier paso, en relación con los demás pasos. Este patrón puede indicar que está seleccionando demasiadas columnas. Para conocer las soluciones recomendadas, consulte Lista SELECT grande.