Reglas de monitoreo de consultas de WLM
En la administración de cargas de trabajo (WLM) de Amazon Redshift, las reglas de monitoreo de consultas definen los límites de rendimiento basados en métricas para las colas de WLM y especifican la acción que se debe realizar cuando una consulta supere esos límites. Por ejemplo, para una cola dedicada a consultas de ejecución corta, puede crear una regla que cancele las consultas que se ejecuten durante más de 60 segundos. Para hacer un seguimiento de las consultas mal diseñadas, puede disponer de otra regla que registre las consultas que contienen bucles anidados.
Puede definir las reglas de monitorización de consultas como parte de la configuración de la administración de cargas de trabajo (WLM). Puede definir hasta 25 reglas para cada cola, con un límite de 25 reglas para todas las colas. Cada regla incluye hasta tres condiciones, o predicados, y una acción. Un predicado se compone de una métrica, una condición de comparación (=, < o >) y un valor. Si se cumplen todos los predicados para cualquier regla, se desencadena la acción de esa regla. Las acciones de reglas posibles son log, hop y abort, como se explica a continuación.
Las reglas de una cola determinada aplican únicamente a las consultas que se ejecuten en esa cola. Una regla es independiente de otras reglas.
WLM evalúa las métricas cada 10 segundos. Si se desencadena más de una regla durante el mismo periodo, la WLM inicia la acción más severa: anulación, luego, salto y registro. Si la acción es hop o abort, se registra la acción y la consulta se desaloja de la cola. Si la acción es log, la consulta continúa ejecutándose en la cola. WLM inicia solo una acción log por consulta, por regla. Si la cola contiene otras reglas, estas permanecerán en vigor. Si la acción es hop y la consulta se dirige a otra cola, las reglas aplican para la nueva cola. Para obtener más información sobre el monitoreo de consultas y el seguimiento de las acciones realizadas en consultas específicas, consulte la recopilación de ejemplos en Trabajo con aceleración de consultas cortas.
Cuando se cumplen todos los predicados de una regla, WLM escribe una fila a la tabla de sistema STL_WLM_RULE_ACTION. Además, Amazon Redshift registra en STV_QUERY_METRICS las métricas de las consultas que están en ejecución actualmente. Las métricas de consultas completadas se almacenan en STL_QUERY_METRICS.
Definición de una regla de monitoreo de consultas
Las reglas de monitoreo de consultas se crean durante la configuración de WLM, que se establece durante la definición del grupo de parámetros del clúster.
Puede crear reglas con la AWS Management Console o mediante programación con JSON.
nota
Si decide crear reglas mediante programación, recomendamos encarecidamente utilizar la consola para generar el JSON que incluirá en la definición del grupo de parámetros. Para obtener más información, consulte Creación o modificación de una regla de monitoreo de consultas mediante la consola y Configuración de los valores de parámetros mediante la AWS CLI en la Guía de administración de Amazon Redshift.
Para definir una regla de monitorización de consultas, especifique los elementos siguientes:
-
Un nombre de regla: los nombres de reglas deben ser únicos dentro de la configuración de la WLM. Los nombres de reglas pueden tener un máximo de 32 caracteres alfanuméricos o guiones bajos y no pueden contener espacios ni comillas. Puede tener hasta 25 reglas por cola y el límite total para todas las colas es 25 reglas.
-
Uno o más predicados: puede tener hasta tres predicados por regla. Si se cumplen todos los predicados para cualquier regla, se desencadena la acción asociada. Un predicado se define mediante un nombre de métrica, un operador (=, <, o >) y un valor. Un ejemplo es
query_cpu_time > 100000
. Para obtener una lista de métricas y ejemplos de valores para diferentes métricas, consulte Métricas de supervisión de consultas para Amazon Redshift aprovisionado más adelante en esta sección. -
Una acción: si se desencadena más de una regla, la WLM selecciona la regla con la acción más severa. Las acciones posibles, en orden ascendente de gravedad, son:
-
Registro: registra la información acerca de la consulta en la tabla de sistema STL_WLM_RULE_ACTION. Utilice la acción Log cuando solo desee escribir un registro. WLM crea como máximo un registro por consulta, por regla. Después de llevar a cabo una acción log, las otras reglas permanecen vigentes y WLM continúa monitorizando la consulta.
-
Salto (disponible solo con la WLM manual): registra la acción y transfiere la consulta a la siguiente cola coincidente. Si no existe otra cola coincidente, la consulta se cancela. QMR solo salta instrucciones CREATE TABLE AS (CTAS) y consultas de solo lectura, como instrucciones SELECT. Para obtener más información, consulte Salto de cola de consultas de WLM.
-
Anulación: registra la acción y cancela la consulta. QMR no detiene las instrucciones COPY ni las operaciones de mantenimiento, como ANALYZE y VACUUM.
-
Modificación de prioridad (disponible solo con la WLM automática): cambia la prioridad de una consulta.
-
Para limitar el tiempo de ejecución de consultas, le recomendamos que cree una regla de monitorización de consultas en lugar de usar el tiempo de espera de WLM. Por ejemplo, puede establecer max_execution_time
en 50.000 milisegundos como se muestra en el siguiente fragmento JSON.
"max_execution_time": 50000
Pero, en su lugar, le recomendamos definir una regla de monitorización de consultas equivalente que establezca query_execution_time
en 50 segundos como se muestra en el siguiente fragmento JSON.
"rules": [ { "rule_name": "rule_query_execution", "predicate": [ { "metric_name": "query_execution_time", "operator": ">", "value": 50 } ], "action": "abort" } ]
Si desea conocer los pasos necesarios para crear o modificar una regla de monitoreo de consultas, consulte Creación o modificación de una regla de monitoreo de consultas mediante la consola y Propiedades del parámetro wlm_json_configuration en la Guía de administración de Amazon Redshift.
Puede encontrar más información acerca de las reglas de monitorización de consultas en los temas siguientes:
Métricas de supervisión de consultas para Amazon Redshift aprovisionado
En la siguiente tabla se describen las métricas utilizadas en las reglas de monitorización de consultas. (Estas métricas son distintas de las métricas almacenadas en las tablas del sistema STV_QUERY_METRICS y STL_QUERY_METRICS).
Para una métrica determinada, se hace un seguimiento del umbral de rendimiento al nivel de la consulta o del segmento. Para obtener más información acerca de los segmentos y pasos, consulte Flujo de trabajo de planificación y ejecución de consultas.
nota
El parámetro Tiempo de espera de WLM es distinto de las reglas de monitorización de consultas.
Métrica | Nombre | Descripción |
---|---|---|
Query CPU time |
query_cpu_time
|
Tiempo de CPU, en segundos, que utiliza la consulta. CPU
time es diferente de Query execution time . Los valores válidos son de 0 a 999 999. |
Blocks read |
query_blocks_read
|
Número de bloques de datos de 1 MB leídos por la consulta. Los valores válidos son de 0 a 1 048 575. |
Scan row count |
scan_row_count
|
La cantidad de filas en un paso del examen. La cantidad de filas es el número total de filas emitidas antes de filtrar las filas marcadas para eliminación (filas fantasma) y antes de aplicar los filtros de consulta definidos por el usuario. Los valores válidos son de 0 a 999 999 999 999 999. |
Query execution time |
query_execution_time
|
Tiempo de ejecución transcurrido para una consulta, en segundos. El tiempo de ejecución no incluye el tiempo de espera empleado en una cola. Los valores válidos son de 0 a 86 399. |
Tiempo de cola de consulta |
query_queue_time
|
Tiempo de espera en una cola, en segundos. Los valores válidos son de 0 a 86 399. |
Uso de la CPU |
query_cpu_usage_percent
|
Porcentaje de capacidad de la CPU que utilizó la consulta. Los valores válidos son de 0 a 6399. |
Memory to disk |
query_temp_blocks_to_disk
|
Espacio temporal en disco utilizado para escribir resultados intermedios, en bloques de 1 MB. Los valores válidos son de 0 a 319 815 679. |
CPU skew |
cpu_skew
|
La proporción entre el uso máximo de la CPU para cualquier sector y el uso promedio de la CPU para todos los sectores. La métrica se define a nivel segmento. Los valores válidos son de 0 a 99. |
I/O skew |
io_skew
|
La proporción entre la lectura máxima de bloques (E/S) para cualquier sector y la lectura promedio de bloques para todos los sectores. La métrica se define a nivel segmento. Los valores válidos son de 0 a 99. |
Rows joined |
join_row_count
|
La cantidad de filas procesadas en un paso de combinación. Los valores válidos son de 0 a 999 999 999 999 999. |
Nested loop join row count |
nested_loop_join_row_count
|
El número de filas en una combinación de bucle anidado. Los valores válidos son de 0 a 999 999 999 999 999. |
Return row count |
return_row_count
|
La cantidad de filas devueltas por la consulta. Los valores válidos son de 0 a 999 999 999 999 999. |
Segment execution time |
segment_execution_time
|
Tiempo de ejecución transcurrido para un segmento único, en segundos. Para evitar o reducir errores de muestreo, incluya segment_execution_time
> 10 en las reglas.Los valores válidos son de 0 a 86 388. |
Spectrum scan row count |
spectrum_scan_row_count
|
El número de filas de datos en Amazon S3 analizadas por una consulta de Amazon Redshift Spectrum. Los valores válidos son de 0 a 999 999 999 999 999. |
Spectrum scan size |
spectrum_scan_size_mb
|
La cantidad de datos en Amazon S3, en MB, analizados por una consulta de Amazon Redshift Spectrum. Los valores válidos son de 0 a 999 999 999 999 999. |
Prioridad de consulta |
query_priority
|
La prioridad de la consulta. Los valores válidos son |
nota
La acción de salto no se admite con el predicado
query_queue_time
. Es decir, se omiten las reglas de salto definidas cuando se cumplen los requisitos del predicadoquery_queue_time
.-
Los tiempos de ejecución de segmentos cortos pueden ocasionar errores de muestreo con otras métricas, como
io_skew
yquery_cpu_usage_percent
. Para evitar o reducir errores de muestreo, incluya el tiempo de ejecución de segmentos en las reglas. Un buen punto de partida essegment_execution_time > 10
.
La vista SVL_QUERY_METRICS muestra las métricas de consultas completadas. La vista SVL_QUERY_METRICS_SUMMARY muestra los valores máximos de métricas de consultas completadas. Utilice los valores de estas vistas como ayuda para determinar los valores de umbral para definir las reglas de monitorización de consultas.
Métricas de supervisión de consultas para Amazon Redshift sin servidor
En la siguiente tabla se describen las métricas utilizadas en las reglas de supervisión de consultas para Amazon Redshift sin servidor.
Métrica | Nombre | Descripción |
---|---|---|
Query CPU time | max_query_cpu_time |
Tiempo de CPU, en segundos, que utiliza la consulta. CPU time es diferente de Query execution time . Los valores válidos son de 0 a 999 999. |
Blocks read |
max_query_blocks_read
|
Número de bloques de datos de 1 MB leídos por la consulta. Los valores válidos son de 0 a 1 048 575. |
Scan row count |
max_scan_row_count
|
La cantidad de filas en un paso del examen. La cantidad de filas es el número total de filas emitidas antes de filtrar las filas marcadas para eliminación (filas fantasma) y antes de aplicar los filtros de consulta definidos por el usuario. Los valores válidos son de 0 a 999 999 999 999 999. |
Query execution time | max_query_execution_time |
Tiempo de ejecución transcurrido para una consulta, en segundos. El tiempo de ejecución no incluye el tiempo de espera empleado en una cola. Si una consulta supera el tiempo de ejecución establecido, Amazon Redshift sin servidor la detiene. Los valores válidos son de 0 a 86 399. |
Tiempo de cola de consulta | max_query_queue_time |
Tiempo de espera en una cola, en segundos. Los valores válidos son de 0 a 86 399. |
Uso de la CPU |
max_query_cpu_usage_percent
|
Porcentaje de capacidad de la CPU que utilizó la consulta. Los valores válidos son de 0 a 6399. |
Memory to disk |
max_query_temp_blocks_to_disk
|
Espacio temporal en disco utilizado para escribir resultados intermedios, en bloques de 1 MB. Los valores válidos son de 0 a 319 815 679. |
Rows joined |
max_join_row_count
|
La cantidad de filas procesadas en un paso de combinación. Los valores válidos son de 0 a 999 999 999 999 999. |
Nested loop join row count |
max_nested_loop_join_row_count
|
El número de filas en una combinación de bucle anidado. Los valores válidos son de 0 a 999 999 999 999 999. |
nota
La acción de salto no se admite con el predicado
max_query_queue_time
. Es decir, se omiten las reglas de salto definidas cuando se cumplen los requisitos del predicadomax_query_queue_time
.-
Los tiempos de ejecución de segmentos cortos pueden ocasionar errores de muestreo con otras métricas, como
max_io_skew
ymax_query_cpu_usage_percent
.
Plantillas de reglas de monitoreo de consultas
Cuando agrega una regla utilizando la consola de Amazon Redshift, puede elegir crear una regla a partir de una plantilla predefinida. Amazon Redshift crea una nueva regla con un conjunto de predicados y completa los predicados con valores predeterminados. La acción predeterminada es log. Puede modificar los predicados y las acciones para que cumplan con el caso de uso.
En la tabla siguiente se muestran las plantillas disponibles.
Nombre de la plantilla | Predicados | Descripción |
---|---|---|
Combinación de bucle anidado |
nested_loop_join_row_count > 100
|
Una combinación de bucles anidados puede indicar un predicado de combinación incompleto, que suele ocasionar un conjunto de retorno muy grande (un producto cartesiano). Utilice un número de filas bajo para encontrar una consulta potencialmente descontrolada con rapidez. |
Query returns a high number of rows |
return_row_count > 1000000
|
Si dedica una cola a consultas de ejecución corta y sencilla, puede incluir una regla que encuentre consultas que devuelvan un número de filas alto. La plantilla utiliza un valor predeterminado de 1 millón de filas. Para algunos sistemas, puede considerar que un millón de filas es un número alto, o en sistemas más grandes, mil millones de consultas o más puede ser alto. |
Join with a high number of rows |
join_row_count > 1000000000
|
Un paso de combinación que incluya un número de filas inusualmente alto puede indicar la necesidad de más filtros restrictivos. La plantilla utiliza un valor predeterminado de mil millones de filas. Para una cola personalizada (de una única vez) que está destinada a consultas sencillas y rápidas, puede utilizar un número menor. |
High disk usage when writing intermediate results |
query_temp_blocks_to_disk > 100000
|
Cuando las consultas en ejecución utilizan más RAM de sistema que la disponible, el motor de ejecución de consultas escribe resultados intermedios en el disco (memoria vertida). Por lo general, esta condición es el resultado de una consulta inadecuada, que normalmente también es la consulta que utiliza el mayor espacio en disco. El umbral aceptable de uso de disco varía en función del tipo y el número de nodos del clúster. La plantilla utiliza un valor predeterminado de 100 000 bloques o 100 GB. Para un clúster pequeño, puede utilizar un número menor. |
Long running query with high I/O skew | segment_execution_time > 120 y io_skew > 1.30 |
El sesgo de E/S se produce cuando un sector del nodo tiene una tasa de E/S mucho mayor que los otros sectores. Como punto de partida, un sesgo de 1,30 (1,3 veces el promedio) es considerado alto. El sesgo de E/S alto no siempre es un problema, pero cuando se combina con un tiempo de ejecución de consulta prolongado, puede indicar un problema con el estilo de distribución o la clave de ordenación. |
Tablas y vistas de sistema para reglas de monitoreo de consultas
Cuando se cumplen todos los predicados de una regla, WLM escribe una fila a la tabla de sistema STL_WLM_RULE_ACTION. Esta fila contiene detalles para la consulta que activaron la regla y la acción resultante.
Además, Amazon Redshift registra métricas de consultas para las siguientes tablas de sistema y vistas.
-
La tablaSTV_QUERY_METRICS muestra las métricas de consultas en ejecución.
-
La tabla STL_QUERY_METRICS registra las métricas de consultas completadas.
-
La vista SVL_QUERY_METRICS muestra las métricas de consultas completadas.
-
La vista SVL_QUERY_METRICS_SUMMARY muestra los valores máximos de métricas de consultas completadas.