SYS_QUERY_HISTORY - Amazon Redshift

SYS_QUERY_HISTORY

Utilice SYS_QUERY_HISTORY para visualizar los detalles de las consultas de los usuarios. Cada una de las filas representa una consulta del usuario con estadísticas acumuladas para algunos de los campos. Esta vista contiene muchos tipos de consultas, como por ejemplo lenguaje de definición de datos (DDL), lenguaje de manipulación de datos (DML), copia, descarga y Amazon Redshift Spectrum. Contiene tanto las consultas en curso como las que han finalizado.

SYS_QUERY_HISTORY es visible para todos los usuarios. Los superusuarios pueden ver todas las filas; los usuarios normales solo pueden ver sus datos. Para obtener más información, consulte Visibilidad de datos en las tablas y vistas de sistema.

Columnas de la tabla

Nombre de la columna Tipo de datos Descripción
user_id integer El identificador del usuario que envió la consulta.
query_id bigint Identificador de la consulta.
query_label character(320) El nombre abreviado de la consulta.
transaction_id bigint Identificador de la transacción.
session_id integer El identificador del proceso que ejecuta la consulta.
database_name character (128) El nombre de la base de datos al que estaba conectado el usuario cuando se emitió la consulta.
query_type character (32) El tipo de consulta, como, SELECT, INSERT, UPDATE, UNLOAD, COPY, COMMAND, DDL, UTILITY, CTAS y OTHER.
estado character (10) El estado de la consulta. Valores válidos: planificación, en cola, en ejecución, en retorno, erróneo, cancelado y correcto.
result_cache_hit Booleano Indica si la consulta coincide con la memoria caché de resultados.
start_time Marca de tiempo La hora de inicio de la consulta.
end_time Marca de tiempo La hora en que se completó la consulta.
elapsed_time bigint El tiempo total (microsegundos) empleado en la consulta.
queue_time bigint El tiempo total (microsegundos) empleado en la cola de consulta de la clase de servicio.
execution_time bigint El tiempo total (microsegundos) que se ejecuta en la clase de servicio.
error_message character (512) El motivo por el cual se produjo un error en la consulta.
returned_rows bigint La cantidad de filas devueltas al cliente.
returned_bytes bigint La cantidad de bytes devueltos al cliente.
query_text character (4000) La cadena de consulta. Es posible que esta cadena quede truncada.
redshift_version character (256) La versión de Amazon Redshift cuando se ejecutó la consulta.
usage_limit character(150) Lista de los ID de límite de uso alcanzados por la consulta.
compute_type varchar (32) Indica si la consulta se ejecuta en el clúster principal o en un clúster de escalado de simultaneidad. Los valores posibles son primary (la consulta se ejecuta en el clúster principal), secondary (la consulta se ejecuta en el clúster secundario) o primary-scale (la consulta se ejecuta en el clúster de simultaneidad). Esto solo se aplica al clúster aprovisionado.
compile_time bigint El tiempo total (microsegundos) empleado en la compilación de la consulta.
planning_time bigint El tiempo total (microsegundos) empleado en la planificación de la consulta.
lock_wait_time bigint El tiempo total (microsegundos) empleado en la espera del bloqueo de relación.
service_class_id integer

ID de la clase de servicio. Para obtener una lista de ID de clase de servicio, vaya a ID de la clase de servicio WLM.

Esta columna solo se utiliza para consultas ejecutadas en clústeres aprovisionados. Para las consultas que se ejecutan en Redshift sin servidor, esta columna contiene -1.

service_class_name character(64)

Es el nombre de la clase de servicio.

Esta columna solo se utiliza para consultas ejecutadas en clústeres aprovisionados. Para las consultas que se ejecutan en Amazon Redshift sin servidor, esta columna está vacía.

query_priority character(20)

La prioridad de la cola en la que se ejecutó la consulta. Los valores posibles son los siguientes:

  • NULL

  • lowest

  • low

  • normal

  • high

  • highest

NULL significa que la consulta no admite la prioridad de consulta.

Esta columna solo se utiliza para consultas ejecutadas en clústeres aprovisionados. Para las consultas que se ejecutan en Redshift sin servidor, esta columna está vacía.

short_query_accelerated character (10)

Indica si la consulta se ha acelerado mediante la aceleración de consultas cortas (SQA). Los valores posibles son los siguientes:

  • true

  • false

  • NULL

Esta columna solo se utiliza para consultas ejecutadas en clústeres aprovisionados. Para las consultas que se ejecutan en Redshift sin servidor, esta columna está vacía.

user_query_hash character(40)

El hash de consulta generado a partir de la consulta, incluidos los literales de consulta. Las consultas repetidas con el mismo texto de consulta tendrán los mismos valores de user_query_hash.

generic_query_hash character(40)

El hash de consulta generado a partir de la consulta, excluidos los literales de consulta. Las consultas repetidas con el mismo texto de consulta, pero diferentes literales de consulta, tendrán los mismos valores de generic_query_hash.

query_hash_version integer

El número de versión del hash de consulta generado a partir de la consulta.

Consultas de ejemplo

La siguiente consulta devuelve consultas en ejecución y en cola.

SELECT user_id, query_id, transaction_id, session_id, status, trim(database_name) AS database_name, start_time, end_time, result_cache_hit, elapsed_time, queue_time, execution_time FROM sys_query_history WHERE status IN ('running','queued') ORDER BY start_time;

Resultados de ejemplo.

user_id | query_id | transaction_id | session_id | status | database_name | start_time | end_time | result_cache_hit | elapsed_time | queue_time | execution_time ---------+----------+----------------+------------+---------+---------------+---------------------------+----------------------------+------------------+--------------+------------+---------------- 101 | 760705 | 852337 | 1073832321 | running | tpcds_1t | 2022-02-15 19:03:19.67849 | 2022-02-15 19:03:19.739811 | f | 61321 | 0 | 0

La siguiente consulta devuelve la hora de inicio, la hora de finalización, el tiempo en cola, el tiempo transcurrido, el tiempo de planificación y otros metadatos de una consulta específica.

SELECT user_id, query_id, transaction_id, session_id, status, trim(database_name) AS database_name, start_time, end_time, result_cache_hit, elapsed_time, queue_time, execution_time, planning_time, trim(query_text) as query_text FROM sys_query_history WHERE query_id = 3093;

Resultados de ejemplo.

user_id | query_id | transaction_id | session_id | status | database_name | start_time | end_time | result_cache_hit | elapsed_time | queue_time | execution_time | planning_time | query_text --------+----------+----------------+------------+------------+---------------+----------------------------+----------------------------+------------------+--------------+------------+----------------+---------------+------------------------------------- 106 | 3093 | 11759 | 1073750146 | success | dev | 2023-03-16 16:53:17.840214 | 2023-03-16 16:53:18.106588 | f | 266374 | 0 | 105725 | 136589 | select count(*) from item;

La siguiente consulta muestra las 10 consultas SELECT más recientes.

SELECT query_id, transaction_id, session_id, start_time, elapsed_time, queue_time, execution_time, returned_rows, returned_bytes FROM sys_query_history WHERE query_type = 'SELECT' ORDER BY start_time DESC limit 10;

Resultados de ejemplo.

query_id | transaction_id | session_id | start_time | elapsed_time | queue_time | execution_time | returned_rows | returned_bytes ----------+----------------+------------+----------------------------+--------------+------------+----------------+---------------+---------------- 526532 | 61093 | 1073840313 | 2022-02-09 04:43:24.149603 | 520571 | 0 | 481293 | 1 | 3794 526520 | 60850 | 1073840313 | 2022-02-09 04:38:27.24875 | 635957 | 0 | 596601 | 1 | 3679 526508 | 60803 | 1073840313 | 2022-02-09 04:37:51.118835 | 563882 | 0 | 503135 | 5 | 17216 526505 | 60763 | 1073840313 | 2022-02-09 04:36:48.636224 | 649337 | 0 | 589823 | 1 | 652 526478 | 60730 | 1073840313 | 2022-02-09 04:36:11.741471 | 14611321 | 0 | 14544058 | 0 | 0 526467 | 60636 | 1073840313 | 2022-02-09 04:34:11.91463 | 16711367 | 0 | 16633767 | 1 | 575 511617 | 617946 | 1074009948 | 2022-01-20 06:21:54.44481 | 9937090 | 0 | 9899271 | 100 | 12500 511603 | 617941 | 1074259415 | 2022-01-20 06:21:45.71744 | 8065081 | 0 | 7582500 | 100 | 8889 511595 | 617935 | 1074128320 | 2022-01-20 06:21:44.030876 | 1051270 | 0 | 1014879 | 1 | 72 511584 | 617931 | 1074030019 | 2022-01-20 06:21:42.764088 | 609033 | 0 | 485887 | 100 | 8438

La siguiente consulta muestra el recuento diario de consultas select y el tiempo transcurrido promedio de consultas.

SELECT date_trunc('day',start_time) AS exec_day, status, COUNT(*) AS query_cnt, AVG(datediff (microsecond,start_time,end_time)) AS elapsed_avg FROM sys_query_history WHERE query_type = 'SELECT' AND start_time >= '2022-01-14' AND start_time <= '2022-01-18' GROUP BY exec_day, status ORDER BY exec_day, status;

Resultados de ejemplo.

exec_day | status | query_cnt | elapsed_avg ---------------------+---------+-----------+------------ 2022-01-14 00:00:00 | success | 5253 | 56608048 2022-01-15 00:00:00 | success | 7004 | 56995017 2022-01-16 00:00:00 | success | 5253 | 57016363 2022-01-17 00:00:00 | success | 5309 | 55236784 2022-01-18 00:00:00 | success | 8092 | 54355124

La siguiente consulta muestra el rendimiento diario de tiempo transcurrido de consulta.

SELECT distinct date_trunc('day',start_time) AS exec_day, query_count.cnt AS query_count, Percentile_cont(0.5) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P50_runtime, Percentile_cont(0.8) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P80_runtime, Percentile_cont(0.9) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P90_runtime, Percentile_cont(0.99) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P99_runtime, Percentile_cont(1.0) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS max_runtime FROM sys_query_history LEFT JOIN (SELECT date_trunc('day',start_time) AS day, count(*) cnt FROM sys_query_history WHERE query_type = 'SELECT' GROUP by 1) query_count ON date_trunc('day',start_time) = query_count.day WHERE query_type = 'SELECT' ORDER BY exec_day;

Resultados de ejemplo.

exec_day | query_count | p50_runtime | p80_runtime | p90_runtime | p99_runtime | max_runtime ---------------------+-------------+-------------+-------------+-------------+--------------+-------------- 2022-01-14 00:00:00 | 5253 | 16816922.0 | 69525096.0 | 158524917.8 | 486322477.52 | 1582078873.0 2022-01-15 00:00:00 | 7004 | 15896130.5 | 71058707.0 | 164314568.9 | 500331542.07 | 1696344792.0 2022-01-16 00:00:00 | 5253 | 15750451.0 | 72037082.2 | 159513733.4 | 480372059.24 | 1594793766.0 2022-01-17 00:00:00 | 5309 | 15394513.0 | 68881393.2 | 160254700.0 | 493372245.84 | 1521758640.0 2022-01-18 00:00:00 | 8092 | 15575286.5 | 68485955.4 | 154559572.5 | 463552685.39 | 1542783444.0 2022-01-19 00:00:00 | 5860 | 16648747.0 | 72470482.6 | 166485138.2 | 492038228.67 | 1693483241.0 2022-01-20 00:00:00 | 1751 | 15422072.0 | 69686381.0 | 162315385.0 | 497066615.00 | 1439319739.0 2022-02-09 00:00:00 | 13 | 6382812.0 | 17616161.6 | 21197988.4 | 23021343.84 | 23168439.0

La siguiente consulta muestra la distribución de tipos de consulta.

SELECT query_type, COUNT(*) AS query_count FROM sys_query_history GROUP BY query_type ORDER BY query_count DESC;

Resultados de ejemplo.

query_type | query_count ------------+------------- UTILITY | 134486 SELECT | 38537 DDL | 4832 OTHER | 768 LOAD | 768 CTAS | 748 COMMAND | 92

En el siguiente ejemplo, se muestra la diferencia en los resultados del hash de consulta entre varias consultas. Observe las siguientes consultas:

CREATE TABLE test_table (col1 INT); INSERT INTO test_table VALUES (1),(2); SELECT * FROM test_table; SELECT * FROM test_table; SELECT col1 FROM test_table; SELECT * FROM test_table WHERE col1=1; SELECT * FROM test_table WHERE col1=2; SELECT query_id, TRIM(user_query_hash) AS user_query_hash, TRIM(generic_query_hash) AS generic_query_hash, TRIM(query_text) AS text FROM sys_query_history ORDER BY start_time DESC LIMIT 10;

A continuación, se muestra un ejemplo de salida:

query_id | user_query_hash | generic_query_hash | text ---------+-----------------+--------------------+---------- 24723049 | oPuFtjEPLTs= | oPuFtjEPLTs= | select query_id, trim(user_query_hash) as user_query_hash, trim(generic_query_hash) as generic_query_hash, query_hash_version, trim(query_text) as text from sys_query_history order by start_time\r\ndesc limit 20 24723045 | Gw2Kwdd8m2I= | IwfRu8/XAKI= | select * from test_table where col1=2 limit 100 24723041 | LNw2vx0GDXo= | IwfRu8/XAKI= | select * from test_table where col1=1 limit 100 24723036 | H+qep/c82Y8= | H+qep/c82Y8= | select col1 from test_table limit 100 24723033 | H+qep/c82Y8= | H+qep/c82Y8= | select * from test_table limit 100 24723029 | H+qep/c82Y8= | H+qep/c82Y8= | select * from test_table limit 100 24723023 | 50sirx9E1hU= | uO36Z1a/QYs= | insert into test_table values (1),(2) 24723021 | YSVnlivZHeo= | YSVnlivZHeo= | create table test_table (col1 int)

SELECT * FROM test_table; y SELECT col1 FROM test_table; tienen el mismo valor de user_query_hash, ya que test_table solo tiene una columna. SELECT * FROM test_table WHERE col1=1; y SELECT * FROM test_table WHERE col1=2; tienen valores de user_query_hash diferentes, pero valores de generic_query_hash idénticos, ya que las dos consultas son idénticas fuera de los literales de consulta 1 y 2.