この記事は SnowPro Core認定試験(COF-C02) の合格体験記事です。
現在SnowPro Coreは(COF-C03)に移行中です。
はじめに
先日、SnowPro Core試験に2回目の挑戦で合格しました。
1回目の受験では残念ながら不合格だったのですが、結果を振り返る中で、自分の理解が曖昧だった部分や試験で問われるポイントが見えてきました。その後、重要だと感じたテーマを中心に再度学習し、3週間後に無事に合格することができました。
本記事では、その中でも特に重要だと感じたポイントをテーマごとに整理して紹介していきます。
今回は Query Profile(クエリプロファイル) についてです。
Query Profileとは
Query Profile(クエリプロファイル)とは、Snowflakeで実行されたクエリが「どのステップで、どれだけの時間やリソースを消費したか」を可視化する機能です。
Snowflakeでは、SQLが実行されると内部的に複数の処理ステップへ分解されます。Query Profileは、その処理の流れをオペレーターのツリーとして表示し、各ステップの実行時間、スキャンしたデータ量、処理された行数などの統計情報を確認できるようにしてくれます。
クエリがどのように実行されたのかをグラフィカルに把握できるため、「クエリが遅い」「ウェアハウスのコストが高い」といった問題が発生した際に、どの処理がボトルネックになっているのかを特定するための重要な手掛かりとなります。例えば、プルーニングが適切に効いているか、不要なデータを大量にスキャンしていないか、メモリスピルが発生していないかなどを確認できます。
Query Profileは、実際の実行データをもとにボトルネックを分析し、効率的なパフォーマンスチューニングやコスト最適化を行うための出発点となります。
覚えておくべきポイント
① アクセス方法
Query Profileは Snowsight から確認します。
- Monitoring(モニタリング) → Query History(クエリ履歴) を開く
- 対象のクエリをクリックする
- Query Profile タブを開く
② プロファイルの構成(オペレーターツリー)
Query Profileでは、クエリの処理が オペレーターノードのツリー として表示されます。代表的なノードには次のようなものがあります。
| オペレーター | 役割 |
|---|---|
| TableScan | テーブルからデータを読み込む |
| Filter | 条件(WHERE など)で行を絞り込む |
| Join | テーブル同士を結合する |
| Aggregate | 集計(GROUP BY など)を行う |
| Sort | 並べ替え(ORDER BY など)を行う |
各ノードには 実行時間全体に占める割合(%) が表示されます。まずは割合の大きい(=最もコストの高い)ノードに当たりをつけ、そこを掘り下げていく、という読み方が基本になります。
③ 重要な統計情報
各ノードや全体に表示される 統計情報 の読み方は重要なポイントです。
■ Partitions scanned / Partitions total(プルーニングの効き具合)
スキャンしたマイクロパーティション数と、全体のパーティション数の比率です。Snowflakeは不要なパーティションを読み飛ばす プルーニング を行いますが、この比率が高い(=ほとんど全部スキャンしている)場合は、プルーニングが効いていないことを意味します。
■ Bytes spilled to local storage / remote storage(メモリ不足のサイン)
処理に必要なメモリが足りず、データを一時的にディスクへスピルした量です。スピルが発生していると処理が遅くなります。
- local storage へのスピル … ウェアハウスのローカルディスクへの退避
-
remote storage へのスピル … さらに足りずリモートストレージまで退避
スピルが出ている場合の代表的な対処は ウェアハウスのサイズを上げる(メモリを増やす) ことです。
④ 実行時間の内訳
Query Profileでは、処理時間がどのカテゴリに費やされたか確認できます。
- Processing … CPUによる処理
- Local Disk I/O … ローカルディスクの読み書き待ち
- Remote Disk I/O … リモートストレージの読み書き待ち
- Network … ネットワーク通信
- Synchronization … 処理間の同期待ち
-
Initialization … セットアップにかかった時間
この情報によってボトルネックの性質(計算が重いのか、データの読み込みが重いのか等)を切り分けられます。
⑤ 混同しやすい機能
Query Profileと似た目的のツール・機能があり、整理しておきます。
| 機能 | 内容 |
|---|---|
| Query Profile | 実行後のクエリを 視覚的(実行プランの実績) に分析する |
| QUERY_HISTORY | ACCOUNT_USAGE / INFORMATION_SCHEMA で参照できる 表形式のメタデータ(実行時間や対象など) |
| EXPLAIN | クエリを 実行せずに 想定される実行プランを確認する |
「実行せずにプランを見る → EXPLAIN」「実行後の実績を視覚的に見る → Query Profile」「履歴を表で集計する → QUERY_HISTORY」と、目的の違いで覚えておくと混同しません。
最後に
Query Profileは、Snowflakeにおけるパフォーマンスチューニングの出発点となる重要な機能であり、SnowPro Core試験でも押さえておきたいポイントの一つです。
なお、本記事は、私自身が試験対策を進める中で特に重要だと感じた内容をまとめたものであり、SnowPro Coreの出題範囲を網羅したものではありません。実際に受験される際は、公式ドキュメントや公式学習コンテンツも併せて活用しながら学習を進めることをおすすめします。
この記事が、これからSnowPro Coreの受験を目指す方や、Snowflakeの理解を深めたい方のお役に立てれば幸いです。
最後までお読みいただき、ありがとうございました。試験勉強、頑張ってください!
参考リンク