SYS_QUERY_HISTORY - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

SYS_QUERY_HISTORY

Utilizzare SYS_QUERY_HISTORY per visualizzare i dettagli delle query utente. Ogni riga rappresenta una query utente con statistiche accumulate per alcuni campi. Questa visualizzazione contiene molti tipi di query, come DDL (Data Definition Language), DML (Data Manipolation Language), copia, scarico e Amazon Redshift Spectrum. Contiene query sia in esecuzione che finite.

SYS_QUERY_HISTORY è visibile a tutti gli utenti. Gli utenti con privilegi avanzati visualizzano tutte le righe; gli utenti regolari visualizzano solo i propri dati. Per ulteriori informazioni, consultare Visibilità dei dati nelle tabelle e nelle viste di sistema.

Colonne di tabella

Nome colonna Tipo di dati Descrizione
user_id integer Identificatore dell'utente che ha inviato la query.
query_id bigint L'identificativo della query.
query_label character(320) Nome breve per la query.
transaction_id bigint L'identificativo della transazione.
session_id integer L'identificatore processo del processo che esegue la query.
database_name character(128) Il nome del database al quale l'utente era collegato al momento del rilascio della query.
query_type character(32) Il tipo di query, ad esempio SELECT, INSERT, UPDATE, UNLOAD, COPY, COMMAND, DDL, UTILITY, CTAS e OTHER.
status character(10) Lo stato della query. Valori validi: pianificazione, coda, esecuzione, restituzione, fallito, annullato e riuscito.
result_cache_hit Booleano Indica se la query corrisponde alla cache dei risultati.
start_time timestamp Il momento in cui è iniziata la query.
end_time timestamp L'ora in cui è stata completata la query.
elapsed_time bigint La quantità totale di tempo (microsecondi) dedicato alla query.
queue_time bigint Il tempo totale (microsecondi) trascorso nella coda di query della classe di servizio.
execution_time bigint Tempo totale (microsecondi) in esecuzione nella classe di servizio.
error_message character(512) Il motivo per cui una query ha fallito.
returned_rows bigint Il numero di righe restituite al client.
returned_bytes bigint Il numero di byte restituiti al client.
query_text character(4000) Stringa query. Questa stringa potrebbe essere troncata.
redshift_version character(256) La versione di Amazon Redshift all'esecuzione della query.
usage_limit character(150) Elenco del limite di utilizzo IDs raggiunto dalla query.
compute_type varchar(32) Indica se la query è stata eseguita nel cluster principale o in un cluster di dimensionamento della simultaneità. I valori possibili sono primary (la query viene eseguita sul cluster principale), secondary (la query viene eseguita sul cluster secondario) o primary-scale (la query viene eseguita sul cluster di simultaneità). Questo è applicabile solo al cluster con provisioning.
compile_time bigint Il tempo totale (in microsecondi) trascorso nella compilazione della query.
planning_time bigint Il tempo totale (in microsecondi) trascorso nella pianificazione della query.
lock_wait_time bigint Il tempo totale (in microsecondi) trascorso in attesa del blocco della relazione.
service_class_id integer

L'ID della classe di servizio. Per un elenco delle classi di servizio IDs, vai aClasse di servizio WLM IDs.

Questa colonna viene utilizzata solo per le query eseguite su cluster predisposti. Per le query eseguite su Redshift Serverless, questa colonna contiene -1.

service_class_name character(64)

Il nome della classe di servizio.

Questa colonna viene utilizzata solo per le query eseguite su cluster predisposti. Per le query eseguite su Amazon Redshift Redshift Serverless, questa colonna è vuota.

query_priority character(20)

La priorità della coda in cui è stata eseguita la query. I valori possibili sono i seguenti:

  • NULL

  • il più basso

  • low

  • normal

  • high

  • più elevato

NULL indica che la priorità della query non è supportata per la query.

Questa colonna viene utilizzata solo per le query eseguite su cluster predisposti. Per le query eseguite su Redshift Serverless, questa colonna è vuota.

short_query_accelerated character(10)

Se la query è stata accelerata utilizzando l'accelerazione di query brevi (SQA). I valori possibili sono i seguenti:

  • true

  • false

  • NULL

Questa colonna viene utilizzata solo per le query eseguite su cluster predisposti. Per le query eseguite su Redshift Serverless, questa colonna è vuota.

user_query_hash character(40)

L'hash della query generato dalla query, inclusi i relativi valori letterali. Le query ripetute con lo stesso testo della query avranno gli stessi valori user_query_hash.

generic_query_hash character(40)

L'hash della query generato dalla query, esclusi i relativi valori letterali. Le interrogazioni ripetute con lo stesso testo della query, ma valori letterali di query diversi, avranno gli stessi valori generic_query_hash.

query_hash_version integer

Il numero di versione dell'hash della query generato dalla query.

result_cache_query_id integer

Se la query utilizzava la memorizzazione nella cache dei risultati, questo valore di campo è l'ID della query che era l'origine dei risultati memorizzati nella cache. Se la cache dei risultati non è stata utilizzata, questo valore di campo è 0.

Query di esempio

La seguente query restituisce query in esecuzione e in coda.

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;

Output di esempio.

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 seguente query restituisce l'ora di inizio, l'ora di fine, il tempo di accodamento, il tempo trascorso, il tempo di pianificazione e altri metadati per una query specifica.

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;

Output di esempio.

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 seguente query elenca le dieci query SELECT più recenti.

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;

Output di esempio.

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 seguente query mostra il conteggio giornaliero delle query di selezione e il tempo medio trascorso delle query.

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;

Output di esempio.

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 seguente query mostra le prestazioni del tempo trascorso della query giornaliera.

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;

Output di esempio.

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 seguente query mostra la distribuzione del tipo di query.

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

Output di esempio.

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

L'esempio seguente mostra la differenza nei risultati dell'hash delle query tra diverse query. Osserva le seguenti domande:

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;

Di seguito è riportato un esempio di output:

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; hanno lo stesso valore user_query_hash, poiché test_table ha solo una colonna. SELECT * FROM test_table WHERE col1=1;e SELECT * FROM test_table WHERE col1=2; hanno valori user_query_hash diversi, ma valori generic_query_hash identici, poiché le due query sono identiche al di fuori dei valori letterali 1 e 2.