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