

 Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dalla Patch 198. Le UDF Python esistenti continueranno a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="SYS_QUERY_HISTORY"></a>

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, consulta [Visibilità dei dati nelle tabelle e nelle viste di sistema](cm_chap_system-tables.md#c_visibility-of-data).

**Nota**  
Per verificare se il commit di una transazione contenente la query eseguita è riuscito, devi effettuare il join tra le tabelle di sistema e la tabella `sys_transaction_history`. Esempio:  

```
SELECT 
    qh.transaction_id,
    qh.query_id,
    qh.status AS query_status,
    qh.query_type,
    TRIM(qh.query_text) AS query_text,
    th.status AS transaction_status
FROM 
    sys_query_history qh
LEFT JOIN 
    sys_transaction_history th ON qh.transaction_id = th.transaction_id;
```

## Colonne di tabella
<a name="SYS_QUERY_HISTORY-table-columns"></a>


| Nome della colonna  | Tipo di dati  | Description  | 
| --- | --- | --- | 
| user\_id | intero | 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 | intero | 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 degli ID di limite di utilizzo raggiunti 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 | intero | L’ID della classe di servizio. Per un elenco degli ID delle classi di servizio, consulta [ID classe di servizio WLM](cm-c-wlm-system-tables-and-views.md#wlm-service-class-ids).<br />Questa colonna viene utilizzata solo per le query eseguite sui cluster con provisioning. Per le query eseguite in Redshift serverless, questa colonna contiene -1. | 
| service\_class\_name | character(64) | Il nome della classe di servizio.<br />Questa colonna viene utilizzata solo per le query eseguite sui cluster con provisioning. Per le query eseguite su Amazon 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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/redshift/latest/dg/SYS_QUERY_HISTORY.html)<br />NULL indica che la priorità della query non è supportata per la query.<br />Questa colonna viene utilizzata solo per le query eseguite sui cluster con provisioning. Per le query eseguite in Redshift serverless, questa colonna è vuota. | 
| short\_query\_accelerated | character(10) | Se la query è stata accelerata con l’accelerazione di query brevi (SQA) o meno. I valori possibili sono i seguenti:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/redshift/latest/dg/SYS_QUERY_HISTORY.html)<br />Questa colonna viene utilizzata solo per le query eseguite sui cluster con provisioning. Per le query eseguite in 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 query ripetute con lo stesso testo della query ma valori letterali di query diversi avranno gli stessi valori generic\_query\_hash. | 
| query\_hash\_version | intero | Il numero di versione dell’hash della query generato dalla query. | 
| result\_cache\_query\_id | intero | Se la query ha utilizzato la cache dei risultati, il valore di questo campo è l’ID della query che è stata la fonte dei risultati memorizzati nella cache. Se la cache dei risultati non è stata utilizzata, questo valore di campo è `0`. | 
| username | character(128) | Il nome dell’utente che ha inviato la query. | 

## Query di esempio
<a name="SYS_QUERY_HISTORY-sample-queries"></a>

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 query:

```
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 output di esempio.

```
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 perché 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 perché le due query sono identiche al di fuori dei valori letterali 1 e 2.