Workload von Hybridtabellen überwachen

Unistore-Workloads, die Hybridtabelle nutzen, unterscheiden sich möglicherweise von vielen analytischen Workloads, die Sie in Snowflake ausführen. Ihre Workloads können beispielsweise weniger einmalige Abfragen enthalten, die weniger Zeit für die Ausführung benötigen und häufiger ausgeführt werden. Sie haben mehrere Optionen, um Ihre Workloads zu überwachen.

Workloads mit Account Usage-Ansichten überwachen

Verwenden Sie Ansicht AGGREGATE_QUERY_HISTORY, um Ihre operativen Workloads effektiv zu überwachen. 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 QUERY_HISTORY-Ansicht 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.

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

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.