統計プロファイルとは
DB2のRUNSTATSには様々なオプションが用意されていますが、テーブル毎に異なる最適なオプションをRUNSTATSの都度指定したり、外部のファイル等で管理するのは煩雑な作業になりがちです。
DB2の統計プロファイル機能を用いると、テーブル毎のRUNSTASオプションをDB2側に記憶しておき、それらを参照してRUNSTASを実行できるようになります。統計プロファイルは自動保守のRUNSTATSでも利用されます。
なお、REORGにも同様の機能があって良さそうですが、今のところ (DB2 11.1) 提供されていません。
試してみた
統計プロファイルの作成
RUNSTATSにオプションSET PROFILE
を指定すると、RUNSTATSの実行と共に指定されたオプションで統計プロファイルが作成されます。統計プロファイルの作成のみ行いたい場合はSET PROFILE ONLY
を指定します。作成された統計プロファイルはSYSCAT.TABLESのSTATISTICS_PROFILE
列から確認できます。
db2 => runstats on table employee and indexes all set profile
DB20000I RUNSTATS コマンドが正常に完了しました。
db2 => select substr(statistics_profile, 1, 80) from syscat.tables where tabname='EMPLOYEE'
1
--------------------------------------------------------------------------------
RUNSTATS ON TABLE "SVC34"."EMPLOYEE" ON ALL COLUMNS AND INDEXES ALL
統計プロファイルの利用
USE PROFILE
オプションを指定することで、作成された統計プロファイルを利用してRUNSTATSを実行できます。
db2 => select substr(indname, 1, 30), stats_time from syscat.indexes where tabname = 'EMPLOYEE'
1 STATS_TIME
------------------------------ --------------------------
PK_EMPLOYEE 2018-03-10-21.05.31.879000
XEMP2 2018-03-10-21.05.31.879000
2 レコードが選択されました。
db2 => runstats on table employee use profile
DB20000I RUNSTATS コマンドが正常に完了しました。
db2 => select substr(indname, 1, 30), stats_time from syscat.indexes where tabname = 'EMPLOYEE'
1 STATS_TIME
------------------------------ --------------------------
PK_EMPLOYEE 2018-03-10-21.07.13.021000
XEMP2 2018-03-10-21.07.13.021000
2 レコードが選択されました。
統計プロファイルのAND INDEXES ALLオプションにより、索引の統計情報も更新されました。
統計プロファイルの再作成と更新
統計プロファイルはSET POFILE
つきRUNSTATSの再実行により再作成されます。一方UPDATE PROFILE
というオプションも用意されていますが、これは既存の統計プロファイルの一部のみ変更するものです。
db2 => runstats on table employee with distribution update profile only
DB20000I RUNSTATS コマンドが正常に完了しました。
db2 => select substr(statistics_profile, 1, 100) from syscat.tables where tabname='EMPLOYEE'
1
----------------------------------------------------------------------------------------------------
RUNSTATS ON TABLE "SVC34"."EMPLOYEE" ON ALL COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND INDEXES ALL
1 レコードが選択されました。
先ほどの統計プロファイルにWITH DISTRIBUTION
オプションが追加されました。
統計プロファイルの削除
統計プロファイルの削除はUNSET PROFILE
オプションにより行います。
db2 => runstats on table employee unset profile
DB20000I RUNSTATS コマンドが正常に完了しました。
db2 => select substr(statistics_profile, 1, 80) from syscat.tables where tabname='EMPLOYEE'
1
--------------------------------------------------------------------------------
-
1 レコードが選択されました。
参考資料
- IBM Knowledge Center
- DB2 for Linux UNIX and Windows 11.1.0