Db2 RUNSTATS 運用完全ガイド
データベースのパフォーマンスを左右する「実行計画」の精度を保つための、RUNSTATS コマンドの解説ドキュメントです。
1. RUNSTATS の役割
テーブルやインデックスの最新状態(行数、データの散らばり等)をカタログに記録します。オプティマイザはこの情報を基に、最も効率的なクエリ実行ルートを決定します。
- 重要性: データ更新や REORG 後に実行しないと、古い統計情報のせいでクエリが低速化します。
2. 分散統計 (WITH DISTRIBUTION)
データの「偏り(スキュー)」を詳しく調査するオプションです。
- 頻度統計: どの値がどれくらい重複しているか。
- 分位数統計: データの分布範囲。
特定のステータスにデータが集中している列がある場合、この統計が実行計画の最適化に不可欠です。
3. サンプリング (TABLESAMPLE)
巨大なテーブルで統計収集時間を短縮するために使用します。
■ BERNOULLI(ベルヌーイ)
行単位でランダムにサンプリングします。全ページをスキャンしますが、データの並びに癖(日付順など)があっても、精度の高い統計が取れるのが特徴です。
■ SYSTEM(システム)
データページ単位でサンプリングします。特定のページを丸ごと読み飛ばすため、I/O負荷が極めて低く、最も高速に処理が終わります。
4. 実行コマンド例
※スマホの画面幅に合わせて自動で折り返されます。そのままコピーして利用可能です。
[標準的な統計収集]
db2 RUNSTATS ON TABLE スキーマ.テーブル名 AND INDEXES ALL
[分散統計+ベルヌーイ10%]
db2 RUNSTATS ON TABLE スキーマ.テーブル名 WITH DISTRIBUTION AND INDEXES ALL TABLESAMPLE BERNOULLI(10)
[分散統計+システム20%]
db2 RUNSTATS ON TABLE スキーマ.テーブル名 WITH DISTRIBUTION AND INDEXES ALL TABLESAMPLE SYSTEM(20)
5. 進捗状況の確認
A. LIST UTILITIES
db2 LIST UTILITIES SHOW DETAIL
確認ポイント:
Type = RUNSTATS のセクションを探し、Completed Work(処理済)と Total Work(全体量)を比較します。
B. db2pd
db2pd -db データベース名 -runstats
確認ポイント:
実行中の詳細なステータスを確認できます。進捗が止まっていないか、どのオブジェクトを処理中かを見るのに適しています。
6. 推奨される実行タイミング
- 大量のデータロード(LOAD / IMPORT)の直後
- REORG コマンドの完了直後
- インデックスを新規作成した直後
- データの傾向(値の分布)が大きく変わったとき