■ はじめに
Snowflake で時間が掛かる処理があるため そのボトルネックの原因を知りたいのだが そもそも、どう調査していいものかが分からず そっから調査したのでメモ。
目次
【1】ウェアハウス負荷監視 1)ドキュメントについて 補足:リソースモニター(Resource monitor) 【2】負荷監視チャートの表示 【3】負荷監視チャート「Warehouse Load Over Time」 1)クエリステータス 【4】その他パフォーマンスに参考になる画面 1)ウェアハウス一覧画面 2)履歴画面 / クエリプロファイル画面 【5】パフォーマンス改善に活かす 1)キューイング(Status: Queued)がある場合 2)実行中のクエリの負荷が高い場合 3)実行中のクエリ負荷は低いが、パフォーマンスが悪い場合 4)繰り返し使用量が急増する場合
【1】ウェアハウス負荷監視
Snowflake では、 ウェアハウスによって処理されたクエリロードを 棒グラフとして提供してくれている ウェアハウスに関する詳細は、以下の関連記事を参照のこと
Snowflake ~ ウェアハウス / Warehouse ~
https://dk521123.hatenablog.com/entry/2022/12/04/000000
1)ドキュメントについて
* 以下の公式ドキュメントを一読しておくといいかも。
https://docs.snowflake.com/ja/user-guide/warehouses-load-monitoring.html
* 一般サイトとしては、以下も参照。
https://dev.classmethod.jp/articles/snowflake-warehouses-load-monitoring/
補足:リソースモニター(Resource monitor)
* Snowflake の リソースモニター(Resource monitor)ってのがあるが これは、Snowflakeクレジットを消費を監視してくれるもの * 詳細は、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2022/12/04/000000
【2】負荷監視チャートの表示
より。 ~~~~~~~~~~~~~~~ [1] Snowflake の Web UI (Classic Web Interface) にログイン [2] 画面上部の[Warehouses]タブを選択 [3] 使用しているウェアハウス一覧が表示されるので、 対象の <ウェアハウス名> をクリックする => Warehouse Load Over Time ページが表示される ~~~~~~~~~~~~~~~
【3】負荷監視チャート「Warehouse Load Over Time」
* ウェアハウスの以下の情報がある棒グラフ。 ~~~~~~~ + 横軸:5分間隔の時間 + 縦軸:特定の間隔内で実行or待機待ちのクエリの平均数(※補足) ~~~~~~~ * スライダーにより、8時間(最小)~14日(最大)の範囲を選択可能
※補足:「縦軸」について
縦軸について、 ドキュメントだけでは分かりづらいと感じたので 以下、自分用のメモ。 * あくまで5分間に「平均」なので、小数値もあり得る * 例えば、5分超える重い処理を並行して、3つ実行した場合、 縦軸には、3(に近い数。平均値なので)になる
1)クエリステータス
https://docs.snowflake.com/ja/user-guide/warehouses-load-monitoring.html#understanding-the-bar-chart
を参照するといい。 (とりあえず、[1] と [2] が分かっていればいいと思う)
[1] Running
* 実行されていたクエリ
[2] Queued
* ウェアハウスの過負荷が原因で実行待しているクエリ
[3] Queued (Provisioning)
* ウェアハウスがプロビジョニングしている間に待機しているクエリ => 通常、ウェアハウスが再開されてから最初の数分でのみ発生
[4] Queued (Repairing)
* ウェアハウスがコンピューティングリソースを 修復している間に待機しているクエリ => まれにしか発生せず、通常は数分以上続かない
【4】その他パフォーマンスに参考になる画面
1)ウェアハウス一覧画面
* クラスタ(Clusters)が、現状、いくつ Active になっているか確認できる => 例えば、Activeなクラスタ数が、 ずっと MAX_CLUSTER_COUNT で推移している場合に、 コスト面と相談して増やすなどの検討ができる => MAX_CLUSTER_COUNT をあげることを検討した場合 Activeなクラスタ数が、MAX_CLUSTER_COUNT 未満の場合には、 あげても意味ないことも検討できる
画面表示までの手順
[1] Snowflake の Web UI (Classic Web Interface) にログイン [2] 画面上部の[Warehouses]タブを選択 => クラスタ(Clusters)欄を確認(例:「1 active (min: 1, max: 5)」)
2)履歴画面 / クエリプロファイル画面
a) 履歴画面
* 以下の項目が表示される + Size:使用しているウェアハウスのサイズ + Total Duration:実行時間 + Bytes Scanned:これまでにスキャンされたバイト数 など * Filter で表示したい項目を絞る(例:「Status:Running」など)
b) クエリプロファイル画面
* クエリ実行でどこにどの位の割合で時間が掛かっているか表示
https://docs.snowflake.com/ja/user-guide/ui-query-profile.html
画面表示までの手順
https://docs.snowflake.com/ja/user-guide/ui-query-profile.html#how-to-access-query-profile
[1] Snowflake の Web UI (Classic Web Interface) にログイン [2] 画面上部の[History]タブを選択 => 「履歴画面」が表示される [3] 対象のクエリ IDをクリック [4] Profile タブをクリック => 「クエリプロファイル画面」が表示される
【5】パフォーマンス改善に活かす
を参照。
1)キューイング(Status: Queued)がある場合
* 「Status: Queued」については、上述「[2] Queued」の通り、 ウェアハウスの過負荷が原因で実行待しているので 以下を検討する
検討事項
* 別ウェアハウスを用意し、キューに入れられたクエリを そのウェアハウスで実行する or * マルチクラスターウェアハウス を使用している場合は、 マルチクラスター設定を増やす
2)実行中のクエリの負荷が高い場合
* 上述「1)キューイング(Status: Queued)がある場合」の 検討事項と同じ
3)実行中のクエリ負荷は低いが、パフォーマンスが悪い場合
自分用メモ
『実行中のクエリ負荷は低いが、パフォーマンスが悪い場合』を判断するには 同じSQLが長時間横並びに推移している場合 (例えば、3SQL文を並列で実行して、それが縦軸3のまま長時間続いている等)
検討事項
ウェアハウスのサイズをあげる => どの位あげるかは、検証して決めるしかないと思う (期待したパフォーマンスにならない場合もあるし)
4)繰り返し使用量が急増する場合
過去2週間におけるウェアハウスを確認した結果、 繰り返し使用量が急増する場合には、以下を検討
検討事項
* ピークワークロードの一部を独自のウェアハウスに移動し、 残りのワークロードをより小さなウェアハウスで実行する or * マルチクラスター設定を変更してクラスターを追加し、 今後の同時実行性を高める
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 基本編 / ステージ ~
https://dk521123.hatenablog.com/entry/2022/09/01/220643
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ データロードのパフォーマンス ~
https://dk521123.hatenablog.com/entry/2022/12/07/111847
Snowflake ~ ウェアハウス / Warehouse ~
https://dk521123.hatenablog.com/entry/2022/12/04/000000
Snowflake ~ リソースモニター ~
https://dk521123.hatenablog.com/entry/2022/12/01/000000
Snowflake ~ クエリの中断 ~
https://dk521123.hatenablog.com/entry/2022/12/09/152837