LoginSignup
1
0

More than 5 years have passed since last update.

DB2DBA: 統計プロファイルを用いたRUNSTAS

Last updated at Posted at 2018-03-10

統計プロファイルとは

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 レコードが選択されました。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0