- Schema:
Ansicht AGGREGATE_QUERY_HISTORY¶
Mit dieser Account Usage-Ansicht können Sie die Ausführung von Anweisungen im Zeitverlauf überwachen und verfolgen. Sie enthält ähnliche Daten wie die QUERY_HISTORY-Ansicht, wird jedoch in einminütigen Intervallen für wiederholte SQL-Anweisungen aggregiert. Sie können diese Ansicht verwenden, um Ihren Workload zu überwachen und die Leistung zu analysieren.
Zusätzlich zu den Abfragen auf Hybridtabellen sind in AGGREGATE_QUERY_HISTORY alle Abfragen enthalten, die Sie in Snowflake ausführen. AGGREGATE_QUERY_HISTORY ist jedoch besonders nützlich für die Überwachung und Analyse von Unistore-Workloads, die eine kleine Anzahl unterschiedlicher Anweisungen wiederholt mit hohem Durchsatz ausführen.
Spalten¶
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
CALLS |
NUMBER |
Häufigkeit, mit der die Anweisung (Abfrage + Abfrageplan) im Aggregationsintervall ausgeführt wurde. |
INTERVAL_START_TIME |
TIMESTAMP_LTZ |
Startzeit des Messfensters (in der lokalen Zeitzone). |
INTERVAL_END_TIME |
TIMESTAMP_LTZ |
Endzeit des Messfensters (in der lokalen Zeitzone). |
QUERY_PARAMETERIZED_HASH |
TEXT |
Eindeutige ID, um identisch parametrisierte Abfragen zu identifizieren. Siehe QUERY_PARAMETERIZED_HASH-Spalte. |
QUERY_TEXT |
TEXT |
Beispieltext der SQL-Anweisung. |
DATABASE_ID |
NUMBER |
Interner/vom System generierter Bezeichner für die Datenbank, die verwendet wurde. |
DATABASE_NAME |
TEXT |
Datenbank, die zum Zeitpunkt der Abfrage verwendet wurde. |
SCHEMA_ID |
NUMBER |
Interner/vom System generierter Bezeichner für das Schema, die verwendet wurde. |
SCHEMA_NAME |
TEXT |
Schema, das zum Zeitpunkt der Abfrage verwendet wurde. |
QUERY_TYPE |
TEXT |
DML, Abfrage usw. Wenn die Abfrage fehlgeschlagen ist, kann der Abfragetyp UNKNOWN lauten. |
SESSION_ID |
NUMBER |
Sitzung, die die Anweisung ausgeführt hat. |
USER_NAME |
TEXT |
Benutzer, der die Abfrage ausgegeben hat. |
ROLE_NAME |
TEXT |
Rolle, die zum Zeitpunkt der Abfrage in der Sitzung aktiv war. |
ROLE_TYPE |
TEXT |
Gibt an, ob die Abfrage von einer Rolle vom Typ |
WAREHOUSE_ID |
NUMBER |
Interner/vom System generierter Bezeichner für das Warehouse, das verwendet wurde. |
WAREHOUSE_NAME |
TEXT |
Warehouse, in dem die Abfrage ggf. ausgeführt wurde. |
WAREHOUSE_SIZE |
TEXT |
Größe des Warehouses, als diese Anweisung ausgeführt wurde. |
WAREHOUSE_TYPE |
TEXT |
Typ des Warehouse, als diese Anweisung ausgeführt wurde. |
QUERY_TAG |
TEXT |
Abfrage-Tag, das für diese Anweisung über den Sitzungsparameter QUERY_TAG festgelegt wird. |
IS_CLIENT_GENERATED_STATEMENT |
BOOLEAN |
Gibt an, ob die Abfrage von einem Client generiert wurde. |
RELEASE_VERSION |
TEXT |
Release-Version im Format |
ERRORS |
ARRAY |
Liste der Fehlercodes und Fehlermeldungen, die während des Aggregationsintervalls aufgetreten sind. Jeder Fehler hat das Format |
TOTAL_ELAPSED_TIME |
OBJECT |
Verstrichene Zeit (in Millisekunden) |
BYTES_SCANNED |
OBJECT |
Anzahl der von dieser Anweisung gescannten Bytes. |
PERCENTAGE_SCANNED_FROM_CACHE |
OBJECT |
Prozentsatz der Daten, die vom lokalen Festplattencache gescannt wurden. Der Wertebereich reicht von 0,0 bis 1,0. Sie können mit 100 multiplizieren, um einen wahren Prozentsatz zu erhalten. |
BYTES_WRITTEN |
OBJECT |
Anzahl der Bytes, die geschrieben wurden (z. B. beim Laden in eine Tabelle). |
BYTES_WRITTEN_TO_RESULT |
OBJECT |
Anzahl der Bytes, die in ein Ergebnisobjekt geschrieben wurden. Beispielsweise würde |
BYTES_READ_FROM_RESULT |
OBJECT |
Anzahl der Bytes, die aus einem Ergebnisobjekt gelesen wurden. |
ROWS_PRODUCED |
OBJECT |
Anzahl der Zeilen, die von dieser Anweisung erzeugt wurden. |
ROWS_INSERTED |
OBJECT |
Anzahl der Zeilen, die von der Abfrage eingefügt wurden. |
ROWS_UPDATED |
OBJECT |
Anzahl der Zeilen, die von der Abfrage aktualisiert wurden. |
ROWS_DELETED |
OBJECT |
Anzahl der Zeilen, die von der Abfrage gelöscht wurden. |
ROWS_UNLOADED |
OBJECT |
Anzahl der Zeilen, die während des Datenexports entladen wurden. |
BYTES_DELETED |
OBJECT |
Anzahl der Bytes, die von der Abfrage gelöscht wurden. |
PARTITIONS_SCANNED |
OBJECT |
Anzahl der gescannten Mikropartitionen. |
PARTITIONS_TOTAL |
OBJECT |
Gesamtzahl der Mikropartitionen aller Tabellen, die in dieser Abfrage enthalten sind. |
BYTES_SPILLED_TO_LOCAL_STORAGE |
OBJECT |
Datenmenge, die auf eine lokale Festplatte übertragen wurde. |
BYTES_SPILLED_TO_REMOTE_STORAGE |
OBJECT |
Datenmenge, die auf eine externe Festplatte übertragen wurde. |
BYTES_SENT_OVER_THE_NETWORK |
OBJECT |
Datenmenge, die über das Netzwerk gesendete wurde. |
COMPILATION_TIME |
OBJECT |
Kompilierungszeit (in Millisekunden). |
EXECUTION_TIME |
OBJECT |
Ausführungsdauer (in Millisekunden). |
QUEUED_PROVISIONING_TIME |
OBJECT |
Zeit (in Millisekunden), die in der Warehouse-Warteschlange auf die Bereitstellung von Warehouse-Computeressourcen gewartet wurde, weil Warehouses erstellt, fortgesetzt oder in der Größe geändert wurden. |
QUEUED_REPAIR_TIME |
OBJECT |
Zeit (in Millisekunden), die in der Warehouse-Warteschlange gewartet wurde, bis Computeressourcen im Warehouse repariert waren. |
QUEUED_OVERLOAD_TIME |
OBJECT |
Zeit (in Millisekunden), die in der Warehouse-Warteschlange gewartet wurde, weil das Warehouse durch die aktuelle Abfrage-Workload überlastet war. |
TRANSACTION_BLOCKED_TIME |
OBJECT |
Zeit (in Millisekunden), während der eine Sperre durch eine gleichzeitige DML-Operation aktiv war. |
OUTBOUND_DATA_TRANSFER_CLOUD |
TEXT |
Ziel-Cloudanbieter für Anweisungen, die Daten in eine andere Region und/oder Cloud entladen. |
OUTBOUND_DATA_TRANSFER_REGION |
TEXT |
Zielregion für Anweisungen, die Daten in eine andere Region und/oder Cloud entladen. |
OUTBOUND_DATA_TRANSFER_BYTES |
OBJECT |
Anzahl der Bytes, die mit Anweisungen übertragen wurden, die Daten in eine andere Region und/oder Cloud entladen. |
INBOUND_DATA_TRANSFER_CLOUD |
TEXT |
Quell-Cloudanbieter der Anweisungen, die Daten aus einer anderen Region und/oder Cloud laden. |
INBOUND_DATA_TRANSFER_REGION |
TEXT |
Quellregion von Anweisungen, die Daten aus einer anderen Region und/oder Cloud laden. |
INBOUND_DATA_TRANSFER_BYTES |
OBJECT |
Anzahl der Bytes, die bei einer Replikationsoperation von einem anderen Konto übertragen wurden. Das Quellkonto kann sich in derselben Region oder in einer anderen Region als das aktuelle Konto befinden. |
LIST_EXTERNAL_FILES_TIME |
OBJECT |
Zeit (in Millisekunden) für das Auflisten externer Dateien. |
CREDITS_USED_CLOUD_SERVICES |
OBJECT |
Anzahl der Credits, die für Clouddienste verbraucht wurden. |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS |
OBJECT |
Aggregierte Häufigkeit, mit der diese Abfrage Remotedienste aufgerufen hat. Weitere wichtige Details dazu finden Sie in den Nutzungshinweisen. |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS |
OBJECT |
Gesamtzahl der Zeilen, die von dieser Abfrage bei allen Aufrufen an alle Remotedienste gesendet wurden. |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS |
OBJECT |
Gesamtzahl der Zeilen, die von dieser Abfrage bei allen Aufrufen von allen Remotediensten empfangen wurden. |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES |
OBJECT |
Gesamtzahl der Bytes, die von dieser Abfrage bei allen Aufrufen an alle Remotedienste gesendet wurden. |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES |
OBJECT |
Gesamtzahl der Bytes, die von dieser Abfrage bei allen Aufrufen von allen Remotediensten empfangen wurden. |
QUERY_LOAD_PERCENT |
OBJECT |
Der ungefähre Prozentsatz der aktiven Computeressourcen im Warehouse für diese Abfrageausführung. |
QUERY_ACCELERATION_BYTES_SCANNED |
OBJECT |
Anzahl der vom Abfragebeschleunigungsdienst gescannten Bytes. |
QUERY_ACCELERATION_PARTITIONS_SCANNED |
OBJECT |
Anzahl der vom Abfragebeschleunigungsdienst gescannten Partitionen. |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR |
OBJECT |
Oberes Limit des Skalierungsfaktors, der für eine Abfrage von Vorteil wäre. |
CHILD_QUERIES_WAIT_TIME |
OBJECT |
Zeit (in Millisekunden), die bei Aufruf einer memoisierbaren Funktion bis zum Abschluss der zwischengespeicherten Suche benötigt wird. |
HYBRID_TABLE_REQUESTS_THROTTLED_COUNT |
NUMBER |
Anzahl der Abfragen von Hybridtabellen, die gedrosselt wurden. |
OWNER_ROLE_TYPE |
TEXT |
Der Typ der Rolle, die Eigentümer des Objekts ist, entweder |
Der Datentyp OBJECT enthält die folgenden Felder:
Feldname |
Beschreibung |
---|---|
Summe über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
Durchschnitt über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
Standardabweichung über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
Minimum über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
Median über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
90. Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
99. Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
99,9 Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls. |
|
Maximum über alle Ausführungen innerhalb des Aggregationsintervalls. |
Bemerkung
Die folgenden Spalten vom Typ OBJECT enthalten kein Feld sum
:
PERCENTAGE_SCANNED_FROM_CACHE
QUERY_LOAD_PERCENT
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR
QUERY_PARAMETERIZED_HASH-Spalte¶
Die Spalte QUERY_PARAMETERIZED_HASH enthält einen Hash-Wert, der auf der Grundlage der parametrisierten Abfrage berechnet wird, d. h. der Version der Abfrage nach dem Parametrisieren aller Literale.
Die folgenden Abfragen haben zum Beispiel denselben QUERY_PARAMETERIZED_HASH-Wert:
SELECT * FROM table1 WHERE table1.name = 'TIM'
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Für den QUERY_PARAMETERIZED_HASH-Wert gelten die folgenden Einschränkungen:
Das Konstantenliteral muss eines der folgenden Binärfunktionen auf Prädikaten sein: „equal“ (gleich), „not equal“ (nicht gleich), „greater (or equal) than“ (größer als (oder gleich)), „smaller (or equal) than“ (kleiner als (oder gleich)).
Die Aliasnamen müssen identisch sein.
Solange es Unterschiede im SQL-Text gibt, sind die Werte QUERY_HASH und QUERY_PARAMETERIZED_HASH unterschiedlich, mit den folgenden Ausnahmen:
Bei Bezeichnern, Sitzungsvariablen und Stagingbereichsnamen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Unterschiede bei Leerzeichen werden ignoriert.
Literale, die die obige binäre Prädikatsregel erfüllen.
Nutzungshinweise¶
Die Latenzzeit der Ansicht kann bis zu 180 Minuten (3 Stunden) betragen.
Beispiele¶
Sie können die Ansicht AGGREGATE_QUERY_HISTORY verwenden, um potenzielle Probleme mit Fehlern, Warteschlangen, Blockieren durch Sperren oder Drosselung von Hybridtabellen zu überwachen. In der Regel sollten diese Kennzahlen konstant niedrig sein. Wenn Sie bei einer dieser Kennzahlen einen Spitze feststellen, kann dies auf ein Problem hinweisen:
SET (START_DATE, END_DATE) = ('2023-11-01', '2023-11-08'); WITH time_issues AS ( SELECT interval_start_time , SUM(transaction_blocked_time:"sum") AS transaction_blocked_time , SUM(queued_provisioning_time:"sum") AS queued_provisioning_time , SUM(queued_repair_time:"sum") AS queued_repair_time , SUM(queued_overload_time:"sum") AS queued_overload_time , SUM(hybrid_table_requests_throttled_count) AS hybrid_table_requests_throttled_count FROM snowflake.account_usage.aggregate_query_history WHERE TRUE AND interval_start_time > $START_DATE AND interval_start_time < $END_DATE GROUP BY ALL ), errors AS ( SELECT interval_start_time , SUM(value:"count") as error_count FROM ( SELECT a.interval_start_time , e.* FROM snowflake.account_usage.aggregate_query_history a, TABLE(FLATTEN(input => errors)) e WHERE TRUE AND interval_start_time > $START_DATE AND interval_start_time < $END_DATE ) GROUP BY ALL ) SELECT time_issues.interval_start_time , error_count , transaction_blocked_time , queued_provisioning_time , queued_repair_time , queued_overload_time , hybrid_table_requests_throttled_count FROM time_issues FULL JOIN errors ON errors.interval_start_time = time_issues.interval_start_time ;
Sie können die Ansicht abfragen, um Ihren gesamten Workload-Durchsatz und die Parallelität zu überwachen. Viele Workloads haben ein regelmäßiges zyklisches Muster. Unerwartete Spitzen oder Rückgänge sollten untersucht werden.
Überwachen Sie zum Beispiel den Durchsatz und die Parallelität von Warehouse my_warehouse
in der ersten Novemberwoche:
SELECT
interval_start_time
, SUM(calls) AS execution_count
, SUM(calls) / 60 AS queries_per_second
, COUNT(DISTINCT session_id) AS unique_sessions
, COUNT(user_name) AS unique_users
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-11-01'
AND interval_start_time < '2023-11-08'
GROUP BY
interval_start_time
;
Die häufigsten und die besonders häufig wiederholten Abfragen sind ein guter Ansatzpunkt, um die Effizienz Ihres Workloads zu optimieren oder zu verbessern. Sie können die Ansicht abfragen, um die wichtigsten Abfragen für einen Workload nach Ausführungsanzahl zu identifizieren.
Ermitteln Sie z. B. die wichtigsten Abfragen nach Ausführungsanzahl für Warehouse my_warehouse
:
SELECT
query_parameterized_hash
, ANY_VALUE(query_text)
, SUM(calls) AS execution_count
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-11-01'
AND interval_start_time < '2023-11-08'
GROUP BY
query_parameterized_hash
ORDER BY execution_count DESC
;
So ermitteln Sie die langsamsten Abfragen anhand der durchschnittlichen Gesamtlatenz:
SELECT
query_parameterized_hash
, any_value(query_text)
, SUM(total_elapsed_time:"sum"::NUMBER) / SUM (calls) as avg_latency
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = 'MY_WAREHOUSE'
AND interval_start_time > '2023-07-01'
AND interval_start_time < '2023-07-08'
GROUP BY
query_parameterized_hash
ORDER BY avg_latency DESC
;
So analysieren Sie die Performance im Zeitverlauf für eine Abfrage, die Sie besonders interessiert:
SELECT
interval_start_time
, total_elapsed_time:"avg"::number avg_elapsed_time
, total_elapsed_time:"min"::number min_elapsed_time
, total_elapsed_time:"p90"::number p90_elapsed_time
, total_elapsed_time:"p99"::number p99_elapsed_time
, total_elapsed_time:"max"::number max_elapsed_time
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND query_parameterized_hash = '<123456>'
AND interval_start_time > '2023-07-01'
AND interval_start_time < '2023-07-08'
ORDER BY interval_start_time DESC
;