前章から分かるように、ユーザーが統計情報を収集する際に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システムパッケージのPROCEDUREを呼び出すことで、収集ポリシーの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');