Schema:

ACCOUNT_USAGE

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 APPLICATION, DATABASE_ROLE oder ROLE ausgeführt wurde.

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 major_release.minor_release.patch_release (<Hauptversion>.<Nebenversion>.<Patchversion>).

ERRORS

ARRAY

Liste der Fehlercodes und Fehlermeldungen, die während des Aggregationsintervalls aufgetreten sind. Jeder Fehler hat das Format {"code": "code1", "message": "msg1", "count": 10}.

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 select * from . . . eine Menge von Ergebnissen im Tabellenformat für jedes Feld in der Auswahl liefern. . . Im Allgemeinen repräsentiert das Ergebnisobjekt das, was als Ergebnis der Abfrage erzeugt wird, und BYTES_WRITTEN_TO_RESULT steht für die Größe des zurückgegebenen Ergebnisses.

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 ROLE oder DATABASE_ROLE. . Wenn eine Snowflake Native App Eigentümer des Objekts ist, ist der Wert APPLICATION. . Wenn Sie das Objekt löschen, gibt Snowflake NULL zurück, da ein gelöschtes Objekt keine Eigentümerrolle hat.

Der Datentyp OBJECT enthält die folgenden Felder:

Feldname

Beschreibung

sum

Summe über alle Ausführungen innerhalb des Aggregationsintervalls.

avg

Durchschnitt über alle Ausführungen innerhalb des Aggregationsintervalls.

stddev

Standardabweichung über alle Ausführungen innerhalb des Aggregationsintervalls.

min

Minimum über alle Ausführungen innerhalb des Aggregationsintervalls.

median

Median über alle Ausführungen innerhalb des Aggregationsintervalls.

p90

90. Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls.

p99

99. Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls.

p99.9

99,9 Perzentil über alle Ausführungen innerhalb des Aggregationsintervalls.

max

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'
Copy
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Copy

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
;
Copy

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
;
Copy

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
;
Copy

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
;
Copy

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
;
Copy