最適化情報は、通常は、データベース定義時にrdbddlexコマンドを使用してSET STATISTICS文で設定しますが、データベースにデータが格納された後にアクセス性能が悪くなった場合に更新することもできます。
最適化情報は、アクセスプランをチューニングしていない場合に設定できます。
通常は、データベースの定義時に、データベースに格納するデータの件数やインデックスキーのバリエーションを想定して、表のDSIおよびインデックスのDSIに対して設定します。また、運用しているうちに、データベースのアクセス性能が遅くなった場合、または、定義時に設定したデータ量に対して2倍程度になった場合に、最適化情報を更新します。これらの最適化情報の設定および更新は、rdbddlexコマンドを使用してSET STATISTICS文で行います。
データベース定義時に最適化情報を設定せずに表のDSIに対して初期創成を行ったとき、または、インデックスの定義を追加し、rdbsloaderコマンドでインデックスの創成を行ったときに最適化情報を設定することもできます。この場合も、rdbddlexコマンドを使用してSET STATISTICS文で行います。
参照
設定方法の詳細については、“RDB運用ガイド(データベース定義編)”を参照してください。
注意
すでにアクセスプランのチューニングをしている場合は、それ以降にデータの状態に変更があっても、最適化情報の設定および更新は必要ありません。
最適化情報の設定および変更を行うと、すでにチューニング済のアクセスプランが利用できなくなり、性能が保証されません。
現在データベースに格納されているデータ量が分からない場合は、データベース情報をもとにrdbupsコマンドによって最適化情報を更新します。最適化情報の更新は、実表やインデックスの個々のデータの更新のたびに自動的に行われるのではなく、rdbupsコマンドによって一括して更新されます。実際にデータベースをアクセスして設定する情報を採取するためデータベースの規模に応じて処理時間が長くなります。
なお、rdbupsコマンドによって更新された最適化情報は、最大3回前までリカバリすることが可能です。
注意
最適化情報をリカバリすると、リカバリ前の最適化情報には戻すことができないので注意してください。
参照
rdbupsコマンドの指定方法の詳細については、“コマンドリファレンス”を参照してください。
最適化情報を更新するには、rdbupsコマンドのtオプションで該当の表名を指定します。指定例を以下に示します。
$ rdbups -t 在庫管理DB.在庫スキーマ.在庫表 (1) (2) (3)
(1) データベース名
(2) スキーマ名
(3) 表名
該当する表のDSIおよびインデックスのDSIに対して設定される最適化情報の内容を、以下に示します。
格納構造 | 最適化情報の内容 |
---|---|
SEQUENTIAL | 格納レコード数 |
データ部の使用ページ数 | |
RANDOM | 格納レコード数 |
プライム部の使用ページ | |
オーバフロー部の使用ページ数 | |
オーバフロー部の平均ページ数 | |
オーバフロー部の最大ページ数 | |
OBJECT | 格納レコード数 |
データ部の使用ページ数 | |
BTREE | データ部の使用ページ数 |
インデックス部の高さ | |
異なるキー値数 |
参照
格納構造の詳細については、“RDB運用ガイド(データベース定義編)”を参照してください。
設定した最適化情報を出力するには、rdbupsコマンドでuオプションのPRINTを指定します。指定例と出力例を以下に示します。
$ rdbups -t 在庫管理DB.在庫スキーマ.在庫表 -u PRINT
(1)
(1) 出力指定
Update statistics information Target name information Database name ...... 在庫管理DB (1) Schema name ...... 在庫スキーマ (2) Table name ...... 在庫表 (3) No. 1 DSO name : 在庫表DSO (4) DSO statistics information Usage type : BASE (5) Data structure type : SEQUENTIAL (6) Related DSI information No. 1 DSI name : 在庫表DSI (7) DSI statistics information Updated date ...... Sun Apr 08 16:54:18 2007 (8) Usage type : BASE (9) Records ...... 100 (Record) (10) Pages(DATA) ...... 70 (Page) (11) :
(1) データベース名
(2) スキーマ名
(3) 表名
(4) 表に定義されたDSO名
(5) 表に定義されたDSOの種別
BASE : 表のDSO
INDEX: インデックスのDSO
(6) 表またはインデックスのデータ構造
(7) DSOに定義されたDSI名
(8) 最適化情報の設定日時
(最適化情報が未設定の場合は、“Not updated”と出力します)
(9) DSOに定義されたDSIの種別
BASE : 表のDSI
INDEX: インデックスのDSI
(10) DSIの格納レコード(行)数
(11) DSIが使用するぺージ数(割付け部ごとに表示)
RDBディクショナリに保持されている変更前の最適化情報を出力するには、rdbupsコマンドでRオプションおよびcオプションを指定します。指定例と出力例を以下に示します。
$ rdbups -t 在庫管理DB.在庫スキーマ.在庫表 -R -c
(1)
(1) 変更前最適化情報出力指定
Update statistics information Target name information Database name ...... 在庫管理DB (1) Schema name ...... 在庫スキーマ (2) Table name ...... 在庫表 (3) No. 1 DSO name : 在庫表DSO (4) DSO statistics information Usage type : BASE (5) Data structure type : SEQUENTIAL (6) Related DSI information No. 1 DSI name : 在庫表DSI (7) DSI statistics information ...... No. 1 (8) Updated date ...... Sun Apr 08 16:54:18 2007 (9) Usage type : BASE (10) Records ...... 100 (Record) (11) Pages(DATA) ...... 70 (Page) (12) DSI statistics information ...... No. 2 (8) :
(1) データベース名
(2) スキーマ名
(3) 表名
(4) 表に定義されたDSO名
(5) 表に定義されたDSOの種別
BASE : 表のDSO
INDEX: インデックスのDSO
(6) 表またはインデックスのデータ構造
(7) DSOに定義されたDSI名
(8) DSIのRDBディクショナリに保持されている変更前の最適化情報
(1回前、2回前、3回前の順で表示されます。)
(9) 最適化情報の設定日時
(最適化情報が未設定の場合は、“Not updated”と出力します)
(10) DSOに定義されたDSIの種別
BASE : 表のDSI
INDEX: インデックスのDSI
(11) DSIの格納レコード(行)数
(12) DSIが使用するぺージ数(割付け部ごとに表示)