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 コマンドの完了直後
- インデックスを新規作成した直後
- データの傾向(値の分布)が大きく変わったとき
実行タイミングの判断をもっと詳しく(実機ログつきの詳解)
REORGCHK で実行要否を測る手順、自動RUNSTATSが業務ピークに走って実行計画が変わる落とし穴、AUTO_REORG の性質まで含めた詳しい解説は、Zennのフル記事にまとめています。
「とりあえず週次で全テーブルREORG」がなぜ問題を招くのか――“なぜ実行するのか”を自分で判断できるようになるための考え方を、本書 第10章「RUNSTATS・REORGを意図して制御する」で詳説しています。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。