前の章からわかるように、ユーザーが統計情報を収集する際に 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:schema 内のすべてのテーブルの Prefs を設定します。SET_TABLE_PREFS:テーブルの Prefs を設定します。DELETE_SCHEMA_PREFS:schema 内のすべてのテーブルの 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テーブルのプリファレンスDEGREEを削除する
call dbms_stats.delete_table_prefs('TEST', 'T1', 'DEGREE');