Workloads von Hybridtabellen überwachen

Unistore-Workloads, die Hybridtabellen nutzen, unterscheiden sich von vielen analytischen Workloads, die Sie in Snowflake ausführen. So können Ihre Arbeitslasten beispielsweise weniger eindeutige Abfragen enthalten, die weniger Zeit in Anspruch nehmen und häufiger ausgeführt werden. Sie haben mehrere Optionen, um Ihre Workloads zu überwachen.

Transaktionen überwachen

Hybridtabellen unterstützen Snowflake-Features zur Transaktionsüberwachung, einschließlich SHOW TRANSACTIONS, DESCRIBE TRANSACTION, SHOW LOCKS und LOCK WAIT HISTORY.

Das Verhalten dieser Befehle und Ansichten für Hybridtabellen ist mit dem Verhalten für Standard-Snowflake-Tabellen konsistent, mit Ausnahme der folgenden Abweichungen:

  • Ein neuer ROW-Sperrtyp wird im SHOW LOCKS-Befehl eingeführt, um Zeilensperren auf Hybridtabellen darzustellen. Die Sperren werden zusammengefasst, um zu zeigen, dass eine Transaktion (eine oder mehrere) Zeilensperren hält und eine andere Transaktion auf diese Sperren wartet.

  • LOCK WAIT HISTORY zeigt keine schemabezogenen Informationen an.

  • LOCK_WAIT_HISTORY bietet keine Zusammenfassung von BLOCKER_QUERIES. Wenn eine Abfrage durch mehrere Blockierungen blockiert wird, wird sie in der Ansicht als mehrere Datensätze angezeigt und nicht als mehrere Einträge im BLOCKER_QUERIES-JSON-Array für den einzelnen Wartedatensatz.

  • Für das Ergebnis von SHOW LOCKS und die Ansicht LOCK_WAIT_HISTORY gilt Folgendes:

    • Da die Zeilensperren zusammengefasst werden, wird davon ausgegangen, dass die sperrende Transaktion die Sperre erwirbt, wenn sie beginnt.

    • Aufgrund des potenziell hohen Volumens von Unistore-Transaktionen werden nur Sperren angezeigt, die andere Transaktionen für einen längeren Zeitraum (etwa 5 Sekunden) blockiert haben.

    • Es kann sein, dass die sperrende Transaktion immer noch auf die Sperren zu warten scheint, auch wenn sie diese bereits erworben hat (nicht länger als 1 Minute). Die Genauigkeit der Sperrmeldungen wird sich in zukünftigen Releases verbessern.

    • Wenn eine Anweisung, die eine wartende Abfrage blockiert hat, abgeschlossen wurde und eine kurz laufende Abfrage gegen Hybridtabellen war, werden die folgenden Informationen für die blockierende Abfrage nicht im Feld BLOCKER_QUERY des Datensatzes der wartenden Abfrage angezeigt:

      • Abfrage-UUID der Blockierungsabfrage

      • Sitzungs-ID der Blockierungsabfrage

      • Benutzername der Blockierungsabfrage

      • Datenbank-ID der Blockierungsabfrage

      • Datenbankname der Blockierungsabfrage

Workloads überwachen

Um Ihre betrieblichen Workloads effektiv zu überwachen, verwenden Sie die Ansicht Ansicht AGGREGATE_QUERY_HISTORY. Mit dieser Ansicht können Sie den Zustand Ihres Workloads überwachen, Probleme diagnostizieren und Optimierungsmöglichkeiten erkennen. Die AGGREGATE_QUERY_HISTORY-Ansicht aggregiert Abfrageausführungsstatistiken für eine wiederholte parametrisierte Abfrage über ein Zeitintervall, sodass es einfacher und effizienter ist, Muster in Ihren Workloads und Abfragen im Laufe der Zeit zu erkennen. Beachten Sie, dass alle Snowflake-Workloads und -Abfragen in der Ausgabe dieser Ansicht kombiniert werden.

Die Ansicht AGGREGATE_QUERY_HISTORY hilft Ihnen, die folgenden Fragen zu Ihren Workloads zu beantworten:

  • Wie viele Operationen werden pro Sekunde in meinem virtuellen Warehouse ausgeführt?

  • Welche Abfragen in meinem Workload benötigen insgesamt die meiste Zeit oder verbrauchen die meisten Ressourcen?

  • Hat sich die Performance einer bestimmten Abfrage im Laufe der Zeit wesentlich verändert?

Um die Performance und Effizienz Ihres Workloads zu verbessern, werden einzelne Ausführungen von Operationen mit geringer Latenz (unter einer Sekunde) weder in der Ansicht QUERY_HISTORY gespeichert, noch generieren sie ein eindeutiges Abfrageprofil (Query Profile). Stattdessen werden die aggregierten Statistiken für wiederholte Ausführungen dieser Abfrage in der Ansicht AGGREGATE_QUERY_HISTORY zurückgegeben. Sie können auch ein gesampeltes Query Profile für die Abfrage über ein ausgewähltes Zeitintervall anzeigen. Weitere Informationen zu dieser Verhaltensweise finden Sie unter Nutzungshinweise.

Tipp

Sie können die Ansicht Gruppierter Abfrageverlauf in Snowsight verwenden, um die Leistung und die Statistiken für typische Hybridtabellen-Workloads zu visualisieren. Diese Ansicht erfasst nicht die gesamte Aktivität der Hybridtabelle, aber sie bietet eine gute Alternative zur Überwachung der Leistung für eine große Menge einzelner Abfragen, die sich etwas wiederholen und extrem schnell laufen.

Allgemeinen Zustand des Workloads überwachen

Verwenden Sie die Ansicht AGGREGATE_QUERY_HISTORY, um den Gesamtdurchsatz und die Parallelität Ihres Workloads zu überwachen und um unerwartete Spitzen oder Rückgänge in Ihren Workloads zu untersuchen. Beispiel:

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 warehouse_name = '<MY_WAREHOUSE>'
  AND interval_start_time > $START_DATE
  AND interval_start_time < $END_DATE
GROUP BY ALL;
Copy

Sie können auch den aggregierten Abfrageverlauf (Query History) verwenden, um potenzielle Probleme mit Fehlern, Warteschlangen, Blockieren durch Sperren oder Drosselung zu überwachen. Beispiel:

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 WAREHOUSE_NAME = '<MY_WAREHOUSE>'
      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 interval_start_time > $START_DATE
          AND interval_start_time < $END_DATE
  )
  GROUP BY ALL
)
    SELECT
        ts.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 ts
    FULL JOIN errors e ON e.interval_start_time = ts.interval_start_time
;
Copy

In der Regel sollten diese Kennzahlen niedrig bleiben. Wenn Sie einen unerwarteten Spitzenwert feststellen, sollten Sie die Ursache untersuchen.

Wiederholte Abfragen identifizieren und untersuchen

Sie können sich dafür entscheiden, die Leistung von häufig ausgeführten Abfragen zu optimieren oder zu untersuchen, um die Effizienz Ihres Workload zu verbessern. Sie können die Ansicht AGGREGATE_QUERY_HISTORY verwenden, um die wichtigsten Abfragen eines Workloads nach Ausführungsanzahl zu identifizieren. Beispiel:

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 > '2024-02-01'
          AND interval_start_time < '2024-02-08'
GROUP BY
          query_parameterized_hash
ORDER BY execution_count DESC
;
Copy

Sie können sich die Kennzahlen für die langsamsten Abfragen anzeigen lassen. Beispiel:

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 > '2024-02-01'
          AND interval_start_time < '2024-02-08'
GROUP BY
          query_parameterized_hash
ORDER BY avg_latency DESC
;
Copy

Sie können die Leistung einer bestimmten Abfrage im Laufe der Zeit analysieren, um einen Einblick in Trends bei den Latenzen zu erhalten. Beispiel:

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 > '2024-02-01'
          AND interval_start_time < '2024-02-08'
ORDER BY interval_start_time DESC
;
Copy

Diese Abfrage berechnet die Abfragegesamtzeit. Sie können die Abfrage auch ändern, um detailliertere Kennzahlen zu den verschiedenen Phasen einer Abfrage (Kompilierung, Ausführung, Warteschlangenbildung und Sperren) zu erhalten. Für jede Phase werden aggregierte Statistiken zurückgegeben.