クエリチューニングのレシピ
実用的なプレイブック:症状 → 根本原因 → 実証済みの修正。 プロファイルを開いて、注意すべき指標を見つけたものの、「これからどうすればいい?」という疑問が残る場合に活用してください。
1 · 高速診断ワークフロー
-
実行概要をざっと見る
QueryPeakMemoryUsagePerNode > 80 %またはQuerySpillBytes > 1 GBの場合、メモリとディスクへのスピルのレシピに直接進みます。 -
最も遅い Pipeline / Operator を見つける
⟶ Query Profile UI で、OperatorTotalTime % でソートをクリックします。
最も負荷の高い operator は、次にどのレシピブロックを読むべきかを教えてくれます (Scan, Join, Aggregate, …)。 -
ボトルネックのサブタイプを確認する
各レシピは、その_シグネチャ_メトリックパターンから始まります。修正を試す前に、それらに一致させてください。
2 · Operator ごとのレシピ
2.1 OLAP / Connector Scan [metrics]
Scan Operator 内の様々なメトリクスをより良く理解するために、以下の図はこれらのメトリクスとストレージ構造の関連性を示しています。

ディスクからデータを取得し、述語を適用するために、ストレージエンジンはいくつかの手法を利用します。
- データストレージ: エンコードおよび圧縮されたデータは、セグメント内のディスクに格納され、様々なインデックスが付属しています。
- インデックスフィルタリング: エンジンは、BitmapIndex、BloomfilterIndex、ZonemapIndex、ShortKeyIndex、および NGramIndex などのインデックスを利用して、不要なデータをスキップします。
- Pushdown Predicates:
a > 1のような単純な述語は、特定の列で評価するためにプッシュダウンされます。 - 後期実体化: 必要な列とフィルタリングされた行のみがディスクから取得されます。
- Non-Pushdown Predicates: プッシュダウンできない述語が評価されます。
- Projection Expression:
SELECT a + 1などの式が計算されます。
Scan Operator は、IO タスクを実行するための追加のスレッドプールを利用します。したがって、このノードの時間メトリクス間の関係は、以下に示すとおりです。
