DB2 4 min read

Db2 RUNSTATSコマンド解説

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 コマンドの完了直後
  • インデックスを新規作成した直後
  • データの傾向(値の分布)が大きく変わったとき