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

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

トランザクションをモニターする

ハイブリッドテーブルは、 SHOW TRANSACTIONSDESCRIBE TRANSACTIONSHOW LOCKSLOCK WAIT HISTORY を含む、Snowflakeトランザクションモニター機能をサポートしています。

ハイブリッドテーブルに対するこれらのコマンドとビューの動作は、次の変更点を除いて、標準的なSnowflakeテーブルの動作と一致しています。

  • 新しい ROW ロックタイプが SHOW LOCKS コマンドに導入され、ハイブリッドテーブルに対する行ロックを表すことができるようになりました。ロックは要約され、1つのトランザクションが(1つまたは複数の)行ロックを保持し、別のトランザクションがこれらのロックを待機していることが表示されます。

  • LOCK WAIT HISTORY はスキーマ関連情報を表示しません。

  • LOCK_WAIT_HISTORY は BLOCKER_QUERIES を要約しません。クエリが複数のブロッカーによってブロックされた場合、それらは単一の待機記録に対する BLOCKER_QUERIES JSON 配列内の複数のエントリとしてではなく、ビュー内の複数の記録として表示されます。

  • SHOW LOCKS の結果と LOCK_WAIT_HISTORY ビュー:

    • 行ロックは要約されるため、ロックを保持するトランザクションは開始時にロックを取得するものと想定されます。

    • Unistoreのトランザクションは大量に発生する可能性があるため、長時間(約5秒)他のトランザクションをブロックしたロックのみが表示されます。

    • ロック待ちのトランザクションは、ロックを取得した場合でもまだロックを待機しているように見える場合があります(取得から1分以内)。ロックレポートの精度は、今後のリリースで改善される予定です。

    • 待機クエリをブロックしたステートメントが完了し、ハイブリッド・テーブルに対する短時間実行クエリであった場合、待機クエリ記録の BLOCKER_QUERY フィールドには、ブロッカークエリに関する次の情報は表示されません。

      • ブロッカークエリのクエリ UUID

      • ブロッカークエリのセッション ID

      • ブロッカークエリのユーザー名

      • ブロッカークエリのデータベース ID

      • ブロッカークエリのデータベース名

ワークロードをモニターする

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

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

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

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

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

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

Tip

Snowsight の グループ化されたクエリ履歴ビュー を使用して、典型的なハイブリッドテーブルワークロードのパフォーマンスと統計を視覚化できます。このビューは、すべてのハイブリッドテーブルのアクティビティをキャプチャするわけではありませんが、やや反復的で、非常に高速に実行される大容量の個々のクエリのパフォーマンスをモニターするための良い選択肢を提供します。

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

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

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

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

ワークロードの効率を向上させるために、よく実行される一般的なクエリのパフォーマンスを最適化または調査することを選択できます。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

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