35. 【補足】RUNSTATSコマンド(統計情報の更新)
RUNSTATSコマンドで統計情報を更新する
多くの場合、この
基本形でOK
RUNSTATS ON TABLE スキーマ名.表名
RUNSTATS ON TABLE スキーマ名.表名 AND INDEXES ALL
(※DB2 10.1からスキーマ名が省略可能になっています)
RUNSTATS実行中でも表に読み書きアクセス可能
少し進んだ使い方
データに「偏り」がある場合、分散統計
を試してください。こちらもお勧め
①分散統計で収集する
RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION
RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION AND INDEXES ALL
②サンプリングでRUNSTATSの実行時間を短くする
RUNSTATS ON TABLE SIM.DEPARTMENTS WITH DISTRIBTION TABLESAMPLE
BERNOULLI (5)
35
表を5%サンプリングする例(大
規模環境用)
36. 【補足】分散統計とインデックス
表の分散統計 (WITH DISTRIBUTION)
表データに「偏り」があり、その表がパフォーマンス上重要な場合はRUNSTATS … WITH
DISTRIBUTIONで表データの偏り(分散状況)を含めた統計情報を取得することで、より精度
の高いアクセスプランが作成可能になります
巨大な表で分散統計を取得すると、実行時間が長くなりすぎる場合があります。その場合は
TABLESAMPLEオプションでサンプリングを設定することで時間を調整可能です
インデックスの分散統計
RUNSTATSで"… AND DETAILED INDEXES ALL"を指定することで、インデックスの分散
統計を取得できますが、インデックスの分散統計を取得することでアクセスプランが改善出来
るケースは(表の分散統計と比較すると)少ない傾向にあります
DB2 9.7までと10.1ではインデックスの分散統計の挙動が変更されています
9.7まで: デフォルトでインデックス全体の分散情報を取得。SAMPLED DETAILEDと指定すると、サン
プリングを実施
10.1から:デフォルトでは、インデックスをサンプリングして部分的な分散統計を取得。UNSAMPLED
DETAILEDと指定すると、サンプリングせずに全体の分散統計を取得
インデックスの分散統計取得の例)
RUNSTATS ON TABLE スキーマ名.表名 WITH DISTRIBUTION AND SAMPLED DETAILED
INDEXES ALL
36