SYS_QUERY_HISTORY - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

SYS_QUERY_HISTORY

Utilisez SYS _ QUERY _ HISTORY pour afficher les détails des requêtes des utilisateurs. Chaque ligne représente une requête utilisateur avec des statistiques cumulées pour certains des champs. Cette vue contient de nombreux types de requêtes, telles que le langage de définition des données (DDL), le langage de manipulation des données (DML), les requêtes de copie, de déchargement et Amazon Redshift Spectrum. Elle contient à la fois les requêtes en cours d’exécution et terminées.

SYS_ QUERY _ HISTORY est visible par tous les utilisateurs. Les super-utilisateurs peuvent voir toutes les lignes, tandis que les utilisateurs standard peuvent voir uniquement leurs propres données. Pour plus d'informations, consultez Visibilité des données dans les tables et vues système.

Colonnes de la table

Nom de la colonne Type de données Description
user_id entier Identificateur de l’utilisateur qui a envoyé la requête.
query_id bigint Identificateur de requête.
query_label caractère (320) Nom abrégé de la requête.
transaction_id bigint Identificateur de transaction.
session_id entier Identificateur de processus du processus exécutant la requête.
database_name character(128) Nom de la base de données à laquelle l’utilisateur était connecté lorsque la requête a été émise.
query_type character(32) Type de requête, tel que,SELECT,INSERT,UPDATE,UNLOAD,COPY, COMMANDDDL,UTILITY,CTAS, etOTHER.
status character(10) Statut de la requête. Valeurs valides : planification, mise en file d’attente, exécution, retour, échec, annulation et succès.
result_cache_hit Booléen Indique si la requête correspond au cache de résultats.
start_time timestamp Heure à laquelle la requête a commencé.
end_time timestamp Heure à laquelle la requête s’est terminée.
elapsed_time bigint Temps total (microsecondes) passé sur la requête.
queue_time bigint Temps total (microsecondes) passé dans la file d’attente de requêtes de classe de service.
execution_time bigint Durée totale (microsecondes) d’exécution dans la classe de service.
error_message character(512) Raison pour laquelle une requête a échoué.
returned_rows bigint Nombre de lignes retournées au client.
returned_bytes bigint Nombre d’octets retournés au client.
query_text character(4000) Chaîne de requête. Cette chaîne peut être tronquée.
redshift_version character(256) Version Amazon Redshift lors de l’exécution de la requête.
usage_limit character(150) Liste des limites d'utilisation IDs atteintes par la requête.
compute_type varchar(32) Indique si la requête s’exécute sur le cluster principal ou sur le cluster de mise à l’échelle de simultanéité. Les valeurs possibles sont primary (la requête s’exécute sur le cluster principal), secondary (la requête s’exécute sur le cluster secondaire), ou primary-scale (la requête s’exécute sur le cluster de simultanéité). Cela ne s’applique qu’au cluster provisionné.
compile_time bigint Le temps total (en microsecondes) consacré à la compilation de la requête.
planning_time bigint Le temps total (en microsecondes) consacré à la planification de la requête.
lock_wait time bigint Le temps total (microsecondes) passé à attendre le verrou relationnel.
identifiant_classe de service entier

ID de la classe de service. Pour obtenir la liste des classes de serviceIDs, rendez-vous surWLMclasse de service IDs.

Cette colonne est uniquement utilisée pour les requêtes exécutées sur des clusters provisionnés. Pour les requêtes exécutées sur Redshift Serverless, cette colonne contient -1.

service_class_name character(64)

Nom de la classe de service.

Cette colonne est uniquement utilisée pour les requêtes exécutées sur des clusters provisionnés. Pour les requêtes exécutées sur Amazon Redshift Redshift Serverless, cette colonne est vide.

query_priority character(20)

Priorité de la file d'attente dans laquelle la requête a été exécutée. Les valeurs possibles sont les suivantes :

  • NULL

  • le plus bas

  • bas

  • normal

  • haut

  • le plus élevé

NULLsignifie que la priorité de la requête n'est pas prise en charge pour la requête.

Cette colonne est uniquement utilisée pour les requêtes exécutées sur des clusters provisionnés. Pour les requêtes exécutées sur Redshift Serverless, cette colonne est vide.

requête_courte accélérée character(10)

Si la requête a été accélérée à l'aide de l'accélération des requêtes courtes (SQA). Les valeurs possibles sont les suivantes :

  • vrai

  • false

  • NULL

Cette colonne est uniquement utilisée pour les requêtes exécutées sur des clusters provisionnés. Pour les requêtes exécutées sur Redshift Serverless, cette colonne est vide.

user_query_hash character(40)

Le hachage de la requête généré à partir de la requête, y compris ses littéraux de requête. Les requêtes répétées avec le même texte de requête auront les mêmes valeurs user_query_hash.

generic_query_hash character(40)

Le hachage de la requête généré à partir de la requête, à l'exclusion de ses littéraux de requête. Les requêtes répétées avec le même texte de requête, mais des littéraux de requête différents, auront les mêmes valeurs generic_query_hash.

version de hachage de la requête entier

Le numéro de version du hachage de requête généré à partir de la requête.

Exemples de requêtes

La requête suivante renvoie les requêtes en cours d’exécution et en file d’attente.

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;

Exemple de sortie.

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 requête suivante renvoie l’heure de début, l’heure de fin, la durée de la file d’attente, le temps écoulé, le temps de planification et et d’autres métadonnées pour une requête spécifique.

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;

Exemple de sortie.

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 requête suivante répertorie les 10 SELECT requêtes les plus récentes.

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;

Exemple de sortie.

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 requête suivante indique le nombre quotidien de requêtes de sélection et le temps moyen écoulé pour les requêtes.

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;

Exemple de sortie.

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 requête suivante indique la performance quotidienne du temps moyen écoulé pour les requêtes.

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;

Exemple de sortie.

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 requête suivante indique la distribution du type de requête.

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

Exemple de sortie.

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

L'exemple suivant montre la différence entre les résultats de hachage des requêtes entre plusieurs requêtes. Observez les requêtes suivantes :

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;

Voici un exemple de sortie :

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;et SELECT col1 FROM test_table; ont la même valeur user_query_hash, puisque test_table n'a qu'une seule colonne. SELECT * FROM test_table WHERE col1=1;et SELECT * FROM test_table WHERE col1=2; ont des valeurs user_query_hash différentes, mais des valeurs generic_query_hash identiques, car les deux requêtes sont identiques en dehors des littéraux de requête 1 et 2.