Ich möchte Abfrage-IDs für alle Systemtabellen und Ansichten in Amazon Redshift abgleichen.
Kurzbeschreibung
Du kannst die Spalte query_id als Abfrage-ID für SYS views (SYS-Ansichten) verwenden, einschließlich SYS_QUERY_HISTORY. Bei STL-/SVL-Tabellen und -Ansichten einschließlich STL_QUERY kannst du die Spalte Abfrage für die Abfrage-ID verwenden. Die Spalte Abfrage identifiziert die neu geschriebenen untergeordneten Abfragen, die Amazon Redshift generiert, wenn es die ursprüngliche Abfrage verarbeitet. Weitere Informationen findest du unter Verbessern der Nachverfolgung von Abfrage-Bezeichnern mithilfe der SYS-Überwachungsansichten.
Lösung
Zugriff auf Systemtabellen gewähren
Um Abfrage-IDs in allen Systemtabellen in Amazon Redshift abzugleichen, muss der Benutzer entweder ein Superuser sein oder über die erforderlichen Berechtigungen verfügen. Informationen darüber, wie du einem bestimmten Benutzer Zugriff gewährst, findest du unter Sichtbarkeit von Daten in Systemtabellen und -Ansichten.
Führe den folgenden Befehl aus, um einem bestimmten Benutzer Zugriff zu gewähren und ihm eine systemdefinierte Rolle zuzuweisen:
GRANT ROLE sys:monitor TO database_user;
Hinweis: Ersetze database_user durch deinen Datenbankbenutzer.
Korrelieren der Abfrage-IDs
Amazon Redshift liefert möglicherweise keine exakten Übereinstimmungen zwischen der Spalte query_id und der Spalte Abfrage. Du kannst jedoch nach möglichen Übereinstimmungen zwischen SYS- und STL-/SVL-Tabellen suchen.
Verwende die query_id von SYS, um die Abfrage-ID in STL/SVL in der folgenden Abfrage abzurufen:
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;
Hinweis: Abfragen, die nur auf dem Hauptknoten ausgeführt werden, sind in SYS_QUERY_HISTORY vorhanden, STL_QUERY schließt diese Abfragen jedoch aus.
Verwende die Abfrage von STL/SVL, um die Abfrage-ID in SYS in der folgenden Abfrage abzurufen:
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;
Den Abfrageverlauf für identische SQL-Anweisungen finden
Die Ausgabe dieser Abfragen kann hilfreich sein, wenn du verschiedene Abfrageausführungen vergleichst. Um identische Abfragen zu finden, die zu unterschiedlichen Zeiten in SYS_QUERY_HISTORY ausgeführt wurden, verwende die folgenden Abfragen, um den user_query_hash-Wert und die entsprechenden Einträge abzurufen:
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>';
Ähnliche Informationen
Arbeitsablauf für die Planung und Ausführung von Abfragen