オプティマイザ統計の取得プロシージャのプリファレンス
Oracle Database 10g 以降、オプティマイザ統計を自動的に収集するジョブが実行されます。自動実行ジョブは DBMS_STATS パッケージの GATHER_DATABASE_STATS_JOB_PROC プロシージャが実行されます。データベース全体の統計情報を取得する場合には GATHER_DATABASE_STATS プロシージャが利用されます。これらのプロシージャが統計情報を取得する時に使用する様々なプリファレンスが定義されており、DBMS_STATS パッケージの SET_GLOBAL_PREFS プロシージャで変更することができます。
SQL> EXECUTE DBMS_STATS.SET_GLOBAL_PREFS('ESTIMATE_PERCENT', 10);
PL/SQL procedure successfully completed.
SQL> SELECT DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT') FROM DUAL;
DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT')
--------------------------------------------------------------------------------
10
本記事では統計情報取得プロシージャのプリファレンスについて、Oracle Database のバージョンによる変化を確認し、Oracle Database 11g 以降に追加された代表的なオプションの説明を記述しています。
DBMS_STATS パッケージの変遷
DBMS_STATS パッケージの SET_GLOBAL_PREFS プロシージャで指定できる値をバージョン毎に記載しています。旧バージョンで使用できたパラメーターが使えなくなることはありませんが、バージョンが進むにつれて使用できる値が増えています。
| パラメーター名 | 11g(11.2) | 12c(12.1) | 12c(12.2) | 18c(18) | 19c(19) | 21c(21) | 23ai(23) | 備考 |
|---|---|---|---|---|---|---|---|---|
| APPROXIMATE_NDV_ALGORITHM | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | |
| AUTOSTATS_TARGET | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| AUTO_STAT_EXTENSIONS | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | |
| AUTO_TASK_INTERVAL | - | - | - | - | 〇 | 〇 | 〇 | Exadata 専用 |
| AUTO_TASK_MAX_RUN_TIME | - | - | - | - | 〇 | 〇 | 〇 | Exadata 専用 |
| AUTO_TASK_STATUS | - | - | - | - | 〇 | 〇 | 〇 | Exadata 専用 |
| CASCADE | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| CONCURRENT | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| DEGREE | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| ESTIMATE_PERCENT | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| GLOBAL_TEMP_TABLE_STATS | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| GRANULARITY | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| INCREMENTAL | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| INCREMENTAL_LEVEL | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| INCREMENTAL_STALENESS | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| METHOD_OPT | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| NO_INVALIDATE | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| OPTIONS | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| PREFERENCE_OVERRIDES_PARAMETER | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | |
| PUBLISH | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| STALE_PERCENT | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| STAT_CATEGORY | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | |
| TABLE_CACHED_BLOCKS | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
| WAIT_TIME_TO_UPDATE_STATS | - | - | 〇 | 〇 | 〇 | 〇 | 〇 |
追加されたプリファレンスの説明
APPROXIMATE_NDV_ALGORITHM
シノプシス生成アルゴリズムを指定します。次の値を指定できます。
| 設定値 | 説明 | 備考 |
|---|---|---|
| REPEAT OR HYPERLOGLOG | INCREMENTAL の指定により、適用サンプリングと HyperLogLog を切替 | デフォルト |
| ADAPTIVE SAMPLING | 適応サンプリング・アルゴリズムを使用 | 保守的な設定 |
| HYPERLOGLOG | HyperLogLogアルゴリズムを使用 |
AUTO_STAT_EXTENSIONS
列グループ統計の自動作成を行う場合には ON に設定します。デフォルト値は OFF です。
AUTO_TASK_STATUS, AUTO_TASK_MAX_RUN_TIME, AUTO_TASK_INTERVAL
3つのプリファレンスは高頻度オプティマイザ統計を利用する場合の設定です。デフォルトの1日1回ではなく、15分間隔(デフォルト)で統計情報の収集を行うことができます。Exadata システム専用のプリファレンスです。
| プリファレンス名 | デフォルト値 | 説明 |
|---|---|---|
| AUTO_TASK_STATUS | OFF | 高頻度オプティマイザ統計を使用するか? 有効化する場合は ON に設定 |
| AUTO_TASK_MAX_RUN_TIME | 3600 | 高頻度オプティマイザ統計ジョブの最大時間(秒) |
| AUTO_TASK_INTERVAL | 900 | 高頻度オプティマイザ統計ジョブの実行間隔(秒) |
CONCURRENT
複数のオブジェクトの統計情報を並列に取得する設定です。DEGREEプリファレンスはパラレル・クエリーの設定ですが、CONCURRENT は統計情報取得処理自体を並列化します。一時的にリソース使用量が増加する可能性があるため、Resource Manager の機能で負荷を調整します。
| 設定値 | 説明 | 備考 |
|---|---|---|
| MANUAL | 手動実行時のみ並列実行 | |
| AUTOMATIC | 自動実行時のみ並列実行 | |
| ALL | 常に並列実行 | |
| OFF | 並列実行しない | デフォルト |
INCREMENTAL_STALENESS, INCREMENTAL_LEVEL
これらは INCREMENTAL プリファレンスが TRUE に設定(デフォルト FALSE)された場合の動作を決定します。
| プリファレンス名 | デフォルト値 | 説明 |
|---|---|---|
| INCREMENTAL_STALENESS | ALLOW_MIXED_FORMAT | パーティションまたはサブパーティションが失効したとみなされる状況を指定 |
| INCREMENTAL_LEVEL | PARTITION | どのシノプシスを収集するかを制御する |
OPTIONS
DBMS_STATS.GATHER_TABLE_STATS プロシージャの options パラメーターに指定する値を設定します。
PREFERENCE_OVERRIDES_PARAMETER
パラメーターの入力値をプリファレンス値で上書きするかを指定指定します。デフォルト値は FALSE です。
STAT_CATEGORY
インポートまたはエクスポートするカテゴリーを指定します。以下の値を設定できます。
| 設定値 | 説明 | 備考 |
|---|---|---|
| OBJECT_STATS | 表、列、索引の統計 | デフォルト |
| SYNOPSES | 増分統計 | |
| REALTIME_STATS | リアルタイム統計 | デフォルト |
TABLE_CACHED_BLOCKS
索引のクラスタリング要因の計算に使用されるバッファ・キャッシュに載るブロック数の推定値を設定します。デフォルト値は 1 です。
WAIT_TIME_TO_UPDATE_STATS
統計情報の更新に必要なロックのタイムアウト分数を指定します。デフォルトは15(分)です。
マニュアル
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (11.2) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (12.1) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (12.2) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (18) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (19) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (21) DBMS_STATS
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス (23) DBMS_STATS
Author: Noriyoshi Shinoda / Date: July 23, 2025