SYS_QUERY_HISTORY
Use SYS_QUERY_HISTORY para visualizar detalhes das consultas do usuário. Cada linha representa uma consulta de usuário com estatísticas acumuladas para alguns dos campos. Essa visualizações contêm muitos tipos de consultas, como linguagem de definição de dados (DDL), linguagem de manipulação de dados (DML), cópia, descarregamento e Amazon Redshift Spectrum. Contém tanto consultas em execução como finalizadas.
SYS_QUERY_HISTORY é visível para todos os usuários. Os superusuários podem ver todas as linhas; usuários regulares podem ver somente seus próprios dados. Para obter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.
Colunas da tabela
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
user_id | integer | O identificador do usuário que enviou a consulta. |
query_id | bigint | O identificador da consulta. |
query_label | character(320) | O nome abreviado da consulta. |
transaction_id | bigint | O identificador da transação. |
session_id | integer | O identificador do processo que está executando a consulta. |
database_name | character(128) | O nome do banco de dados ao qual o usuário estava conectado quando a consulta foi enviada. |
query_type | character(32) | O tipo de consulta, como SELECT, INSERT, UPDATE, UNLOAD COPY, COMMAND, DDL, UTILITY, CTAS e OTHER. |
status | character(10) | O status da consulta. Valores válidos: planning, queued, running, returning, failed, canceled e success. |
result_cache_hit | Booliano | Indica se a consulta corresponde ao cache de resultados. |
start_time | timestamp | O horário em que a consulta começou. |
end_time | timestamp | O horário em que a consulta foi concluída. |
elapsed_time | bigint | O tempo total (em microssegundos) transcorrido da consulta. |
queue_time | bigint | O tempo total (em microssegundos) transcorrido na fila de consultas da classe de serviço. |
execution_time | bigint | O tempo total (em microssegundos) em execução na classe de serviço. |
error_message | character(512) | O motivo por que uma consulta falhou. |
returned_rows | bigint | O número de linhas retornadas ao cliente. |
returned_bytes | bigint | O número de bytes retornados ao cliente. |
query_text | character(4000) | A string de consulta. Essa string poderá estar truncada. |
redshift_version | character(256) | A versão do Amazon Redshift quando a consulta foi executada. |
usage_limit | character(150) | Lista de IDs de limite de uso atingidos pela consulta. |
compute_type | varchar(32) | Indica se a consulta é executada no cluster principal ou em um cluster de escalabilidade da simultaneidade. Os valores possíveis são primary (a consulta é executada no cluster principal), secondary (a consulta é executada no cluster de simultaneidade) ou primary-scale (a consulta é executada no cluster de simultaneidade). Isso só se aplica ao cluster provisionado. |
compile_time | bigint | O tempo total (em microssegundos) gasto na compilação da consulta. |
planning_time | bigint | O tempo total (em microssegundos) gasto no planejamento da consulta. |
lock_wait_time | bigint | O tempo total (em microssegundos) gasto aguardando o bloqueio da relação. |
service_class_id | integer | O ID da classe de serviço. Para obter uma lista dos IDs de classe de serviço, acesse IDs da classe de serviço do WLM. Essa coluna é usada somente para consultas executadas em clusters provisionados. Em consultas executadas no Redshift sem servidor, essa coluna contém -1. |
service_class_name | character(64) | O nome da classe de serviço. Essa coluna é usada somente para consultas executadas em clusters provisionados. Em consultas executadas no Amazon Redshift sem servidor, essa coluna não contém nenhum valor. |
query_priority | character(20) | A prioridade da fila na qual a consulta foi executada. Os valores possíveis são:
NULL significa que não é possível usar a prioridade de consulta para a consulta em questão. Essa coluna é usada somente para consultas executadas em clusters provisionados. Em consultas executadas no Redshift sem servidor, essa coluna não contém nenhum valor. |
short_query_accelerated | character(10) | Indica se a consulta foi acelerada usando a aceleração de consultas breves (SQA). Os valores possíveis são:
Essa coluna é usada somente para consultas executadas em clusters provisionados. Em consultas executadas no Redshift sem servidor, essa coluna não contém nenhum valor. |
user_query_hash | character(40) | O hash de consulta gerado na consulta, incluindo os respectivos literais. Consultas repetidas com o mesmo texto de consulta terão os mesmos valores user_query_hash. |
generic_query_hash | character(40) | O hash de consulta gerado na consulta, excluindo os respectivos literais. Consultas repetidas com o mesmo texto de consulta e diferentes literais terão os mesmos valores user_query_hash. |
query_hash_version | integer | O número da versão do hash da consulta gerado na consulta. |
result_cache_query_id | integer | Se a consulta tiver usado o armazenamento em cache do resultado, o valor desse campo será o ID da consulta que originou os resultados armazenados em cache. Se o armazenamento em cache de resultados não foi usado, o valor desse campo é |
Consultas de exemplo
A consulta a seguir retorna consultas em execução e enfileiradas.
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;
Exemplo de resultado.
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
A consulta a seguir retorna a hora de início, a hora de término, a hora da fila, o tempo decorrido, o tempo de planejamento e outros metadados de uma 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;
Exemplo de resultado.
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;
A consulta a seguir lista as dez consultas SELECT mais recentes.
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;
Exemplo de resultado.
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
A consulta a seguir mostra a contagem diária de consultas de seleção e o tempo médio decorrido da consulta.
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;
Exemplo de resultado.
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
A consulta a seguir mostra o desempenho do tempo decorrido da consulta diária.
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;
Exemplo de resultado.
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
A consulta a seguir mostra a distribuição do tipo de consulta.
SELECT query_type, COUNT(*) AS query_count FROM sys_query_history GROUP BY query_type ORDER BY query_count DESC;
Exemplo de resultado.
query_type | query_count ------------+------------- UTILITY | 134486 SELECT | 38537 DDL | 4832 OTHER | 768 LOAD | 768 CTAS | 748 COMMAND | 92
O exemplo a seguir mostra a diferença nos resultados do hash de consulta entre várias consultas. Observe as seguintes 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;
Este é um exemplo de saída:
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;
e SELECT col1 FROM test_table;
têm o mesmo valor user_query_hash, já que test_table tem apenas uma coluna. SELECT * FROM test_table WHERE col1=1;
e SELECT * FROM test_table WHERE col1=2;
têm valores user_query_hash diferentes, mas valores generic_query_hash idênticos, já que as duas consultas são idênticas fora dos literais de consulta 1 e 2.