Salta al contenuto

Perché non riesco a stabilire la corrispondenza degli ID delle query tra le tabelle di sistema in Amazon Redshift?

3 minuti di lettura
0

Desidero stabilire la corrispondenza degli ID delle query tra le tabelle e le viste di sistema in Amazon Redshift.

Breve descrizione

Puoi utilizzare la colonna query_id come ID della query per le viste SYS, tra cui SYS_QUERY_HISTORY. Per le tabelle e le viste STL/SVL che includono STL_QUERY, puoi utilizzare la colonna query per l'ID della query. La colonna query identifica le query secondarie riscritte che Amazon Redshift genera quando elabora la query originale. Per ulteriori informazioni, consulta Miglioramento del monitoraggio degli identificatori di query utilizzando le viste di monitoraggio SYS.

Risoluzione

Concedi l'accesso alle tabelle di sistema

Per stabilire la corrispondenza degli ID delle query tra le tabelle di sistema in Amazon Redshift, l'utente deve essere un superutente o avere i privilegi necessari. Per informazioni sulla concessione l'accesso a un utente specifico, consulta Visibilità dei dati nelle tabelle e nelle viste di sistema.

Per concedere l'accesso a un utente specifico e assegnare un ruolo definito dal sistema, esegui questo comando:

GRANT ROLE sys:monitor TO database_user;

Nota: sostituisci database_user con l'utente del tuo database.

Correla gli ID delle query

Amazon Redshift potrebbe non fornire corrispondenze esatte tra la colonna query_id e la colonna query. Tuttavia, puoi cercare potenziali corrispondenze tra tabelle SYS e STL/SVL.

Utilizza query_id da SYS per ottenere l'ID della query in STL/SVL nella seguente query:

SELECT query_id, query   FROM sys_query_history a, stl_query b
  WHERE a.query_id = <query_id>
    AND a.transaction_id = b.xid
    AND b.starttime BETWEEN a.start_time AND a.end_time
    AND b.endtime BETWEEN a.start_time AND a.end_time;

Nota: le query eseguite solo sul nodo leader sono presenti in SYS_QUERY_HISTORY, ma STL_QUERY le esclude.

Utilizza la query da STL/SVL per ottenere query id in SYS nella seguente query:

 SELECT query_id, query   FROM sys_query_history a, stl_query b
  WHERE b.query = <query>
    AND a.transaction_id = b.xid
    AND b.starttime BETWEEN a.start_time AND a.end_time
    AND b.endtime BETWEEN a.start_time AND a.end_time;

Trova la cronologia delle query per istruzioni SQL identiche

L'output di queste query può essere utile quando confronti diverse esecuzioni di query. Per trovare query identiche eseguite in momenti diversi in SYS_QUERY_HISTORY, utilizza le seguenti query per recuperare il valore user_query_hash e le relative voci:

 SELECT user_query_hash  FROM sys_query_history
  WHERE query_id = <query_id>;

 SELECT *
  FROM sys_query_history
  WHERE user_query_hash = '<user_query_hash>';

Informazioni correlate

Pianificazione di query e flusso di lavoro di esecuzione

AWS UFFICIALEAggiornata un anno fa