ハイブリッドテーブルのワークロードのモニター

ハイブリッドテーブルを活用するUnistoreワークロードは、Snowflakeで実行している多くの分析ワークロードとは異なる場合があります。たとえば、ワークロードには、実行時間が短く、高い頻度で実行される固有のクエリが少なくなる可能性があります。ワークロードをモニターするには、いくつかのオプションがあります。

Account Usageビューでのワークロードのモニター

運用ワークロードを効率的にモニターするには、 AGGREGATE_QUERY_HISTORY ビュー を使用します。このビューを使用することで、ワークロードの健全性をモニターし、問題を診断して、最適化の方法を特定できます。AGGREGATE_QUERY_HISTORY ビューは、一定期間にわたって繰り返し実行されるパラメーター化されたクエリのクエリ実行統計を集計し、時間の経過に伴うワークロードとクエリのパターンをより簡単かつ効率的に識別できるようにします。このビューの出力では、すべてのSnowflakeワークロードとクエリが結合されることに注意してください。

AGGREGATE_QUERY_HISTORY ビューは、ワークロードに関する次の質問に答えるのに役立ちます。

  • 仮想ウェアハウスでは、1秒あたりにいくつの操作が実行されていますか?

  • ワークロード内で、合計時間またはリソースの消費がもっとも多いクエリはどれですか?

  • 時間の経過とともに特定のクエリのパフォーマンスが大幅に変化しましたか?

ワークロードのパフォーマンスと効率を向上させるために、低レイテンシ(1秒未満)操作の個々の実行は QUERY_HISTORY ビュー に保存されず、一意のクエリプロファイルも生成されません。代わりに、そのクエリを繰り返し実行した場合の集計統計が AGGREGATE_QUERY_HISTORY ビューで返されます。選択した時間間隔におけるクエリのサンプルクエリプロファイルを表示することもできます。

ワークロード全体の健全性のモニター

AGGREGATE_QUERY_HISTORY ビューを使用して、全体的なワークロードのスループットと同時実行性をモニターし、ワークロードの予期しない急増や低下を調査します。例:

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

集計クエリ履歴を使用して、エラー、キューイング、ロックブロック、スロットリングなどの潜在的な問題をモニターすることもできます。例:

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

通常、このような指標は低いままであるはずです。予期しない急増が見られる場合は、原因を調査することをお勧めします。

繰り返し発生するクエリの特定と調査

ワークロードの効率を向上させるために、よく実行される一般的なクエリのパフォーマンスを最適化または調査することを選択できます。AGGREGATE_QUERY_HISTORY ビューを使用して、ワークロードの実行回数が上位のクエリを識別できます。例:

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

もっとも遅いクエリのメトリックを表示するかどうかを選択できます。例:

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

特定のクエリのパフォーマンスを時間の経過とともに分析して、レイテンシの傾向を把握できます。例:

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

このクエリは、合計クエリ時間を計算します。クエリを変更して、クエリのさまざまなフェーズ(コンパイル、実行、キューイング、ロック待機)について、より詳細なメトリックを返すこともできます。各フェーズごとに集計された統計が返されます。