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