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 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:
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.