前の章で説明したように、ユーザーが統計情報の収集時に option を指定しない場合、デフォルトの option が適用されます。例えば、収集の並列度、粒度、ヒストグラムのバケット数などの設定です。現在、OceanBase データベースのオプティマイザーは、業務の実際の状況に応じてデフォルトの option、すなわち収集ポリシーの Preferences(以下、単に「Prefs」と略称)を変更することをサポートしています。
次の表は、現在のオプティマイザーがサポートする収集ポリシー Prefs を示しています。
Prefs名 |
Prefsのデフォルト値 |
説明 |
|---|---|---|
| APPROXIMATE_NDV | TRUE | NDVの計算に推定値を使用するかどうかを指定します。 |
| CASCADE | DBMS_STATS_AUTO_CASCADE(デフォルト値) | カスケードを有効にするかどうかを指定します。例えば、テーブルレベルの統計情報を収集する際にインデックス情報も同時に収集するかどうかを指定します。 |
| DEGREE | NULL、つまり並列度は1 | 収集の並列度を指定します。 |
| ESTIMATE_PERCENT | DBMS_STATS_AUTO_SAMPLE_SIZE | サンプリング比率を指定します。 |
| GRANULARITY | AUTO | パーティション粒度を指定します。 |
| INCREMENTAL | FALSE | 増分収集戦略を採用するかどうかを指定します。 |
| METHOD_OPT | FOR ALL COLUMNS SIZE AUTO | 列レベルのヒストグラム収集戦略を設定します。 |
| STALE_PERCENT | 10 | 統計情報の有効期限切れのしきい値を指定します。 |
| STATS_RETENTION | 31 | 統計情報の履歴保持間隔時間を指定します。 |
DBMS_STATS システムパッケージのプロシージャを呼び出すことで、収集ポリシーの Prefs を確認および変更できます。
GET_PARAM:DBMS_STATS システムパッケージ内のプロシージャのパラメータのデフォルト値を取得します。GET_PREFS:指定された Preferences Prefs のデフォルト値を取得します。RESET_GLOBAL_PREF_DEFAULTS:現在のテナントの収集ポリシー Prefs をデフォルト値に戻します。RESET_PARAM_DEFAULTS:すべてのパラメータのデフォルト値をデータベース推奨値にリセットします。SET_GLOBAL_PREFS:現在のテナントの Prefs を設定します。SET_PARAM:DBMS_STATS システムパッケージ内のプロシージャのパラメータにデフォルト値を設定します。SET_SCHEMA_PREFS:スキーマ内のすべてのテーブルの Prefs を設定します。SET_TABLE_PREFS:テーブルの Prefs を設定します。DELETE_SCHEMA_PREFS:スキーマ内のすべてのテーブルの Prefs 設定を削除します。DELETE_TABLE_PREFS:テーブルの Prefs 設定を削除します。
# テナントレベルの APPROXIMATE_NDV 値を FALSE に設定
call dbms_stats.set_global_prefs('APPROXIMATE_NDV', 'FALSE');
# 現在のテナントの APPROXIMATE_NDV 設定値を照会
select dbms_stats.get_prefs('APPROXIMATE_NDV') from dual;
# グローバルレベルのすべての Prefs デフォルト値を復元
call reset_global_pref_defaults();
# ユーザー TEST の T1 の収集ポリシーの DEGREE 値を 128 に設定
call dbms_stats.set_table_prefs('TEST', 'T1', 'degree', '128');
# ユーザー TEST の T1 の収集ポリシーのデフォルト DEGREE 値を照会
select dbms_stats.get_prefs('degree', 'TEST', 'T1') from dual;
# ユーザー TEST の T1 テーブルの Preferences DEGREE を削除
call dbms_stats.delete_table_prefs('TEST', 'T1', 'DEGREE');