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