SYS_QUERY_HISTORY - Amazon Redshift

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

  • lowest

  • low

  • normal

  • high

  • highest

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:

  • verdadeiro

  • false

  • NULL

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 é 0.

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.