現在、OceanBaseデータベースのオプティマイザーは、DBMS_SCHEDULERシステムパッケージに基づいて実装されたMAINTENANCE WINDOWを通じて、毎日の統計情報の自動収集を実現しており、統計情報が継続的に更新されることを保証しています。
MAINTENANCE WINDOW
OceanBaseデータベースでは、MAINTENANCE WINDOWは月曜日から日曜日までの7日間にわたる自動統計情報収集タスクとして定義されています。月曜日から日曜日までの各タスクの開始時刻は22:00で、最大収集時間は4時間です。詳細は以下の表を参照してください。
メンテナンスウィンドウ名 |
開始時間/頻度 |
最大収集時間 |
|---|---|---|
| MONDAY_WINDOW | 22:00/per week | 4 hours |
| TUESDAY_WINDOW | 22:00/per week | 4 hours |
| WEDNESDAY_WINDOW | 22:00/per week | 4 hours |
| THURSDAY_WINDOW | 22:00/per week | 4 hours |
| FRIDAY_WINDOW | 22:00/per week | 4 hours |
| SATURDAY_WINDOW | 22:00/per week | 4 hours |
| SUNDAY_WINDOW | 22:00/per week | 4 hours |
MAINTENANCE WINDOW情報の確認
現在、OceanBaseデータベースにおけるMAINTENANCE WINDOWはDBMS_SCHEDULERシステムパッケージに基づいて実装されています。そのため、DBMS_SCHEDULERシステムパッケージ関連のビューをクエリすることで、MAINTENANCE WINDOWの関連情報を確認することもできます。
モード |
View Name |
Description |
|---|---|---|
| Oracleモード | DBA_SCHEDULER_JOBS | Job情報のクエリ |
| Oracleモード | sys.ALL_VIRTUAL_TENANT_SCHEDULER_JOB_REAL_AGENT | Job情報の代理テーブル |
| MySQLモード | oceanbase.DBA_SCHEDULER_JOBS | Job情報のクエリ |
MAINTENANCE WINDOWプロパティの設定
現在、OceanBaseデータベースにおけるMAINTENANCE WINDOWのプロパティ設定もDBMS_SCHEDULERシステムパッケージを通じて実装されています。現在サポートされているプロパティ設定構文は以下のとおりです:
自動統計情報タスク収集の禁止/有効化:
DBMS_SCHEDULER.DISABLE($window_name); DBMS_SCHEDULER.ENABLE($window_name);例1:月曜日の自動統計情報収集を無効にする
CALL DBMS_SCHEDULER.DISABLE('MONDAY_WINDOW');例2:月曜日の自動統計情報収集を有効にする
CALL DBMS_SCHEDULER.ENABLE('MONDAY_WINDOW');
統計情報タスクの次回開始時刻の設定:
DBMS_SCHEDULER.SET_ATTRIBUTE($window_name, 'NEXT_DATE', $next_time);例:月曜日の自動統計情報収集の開始時刻を午後8時に設定します。
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW', 'NEXT_DATE', '2022-09-12 20:00:00');
DML STATS
DML STATSは、テーブルに対する追加、削除、変更の各操作回数を記録します。
テーブルのDML STATSは、自動統計情報収集において極めて重要な役割を果たします。これにより、特定のテーブルが再度統計情報を収集する必要があるかどうかを判断します。データベース内のテーブルデータは毎日更新されるわけではないため、データの変更がない、またはデータの変更が想定範囲内である場合は、再度統計情報を収集する必要がありません。これにより、自動統計情報収集タスクの実行効率を向上させることができます。
次の表は、OracleモードとMySQLモードでDML STATS情報のクエリをサポートする関連ビューとテーブル情報を一覧表示したものです。
モード |
ビュー名 |
説明 |
|---|---|---|
| Oracleモード | GV$DML_STATS、V$DML_STATS | 仮想テーブルに記録されたテーブルのDML統計を照会する |
| Oracleモード | sys.ALL_VIRTUAL_MONITOR_MODIFIED_REAL_AGENT | プロキシテーブルに記録されたテーブルのDML統計を照会する |
| Oracleモード | ALL_TAB_MODIFICATIONS、DBA_TAB_MODIFICATIONS、USER_TAB_MODIFICATIONS | テーブル内のすべてのDML統計を照会する |
| MySQLモード | oceanbase.GV$DML_STATS、oceanbase.V$DML_STATS | 仮想テーブルに記録されたテーブルのDML統計を照会する |
| MySQLモード | oceanbase.DBA_TAB_MODIFICATIONS | テーブル内のすべてのDML統計を照会する |
自動統計情報収集ポリシー
OceanBaseデータベースにおけるテーブルの統計情報の有効期限切れの判断基準は、現在のテーブルの増分DML回数(前回の統計情報収集時のDML回数から今回の統計情報収集時までに発生した追加・削除・変更の合計回数)が設定されたしきい値を超えた場合に有効期限が切れることです。しきい値のデフォルトは10%で、この値はprefsを通じて調整可能です。詳細については、収集ポリシー構成パラメータ(Prefs)管理機能を参照してください。
現在、OceanBaseデータベースのオプティマイザーにおける自動統計情報収集ポリシーは以下のとおりです:
システムテーブルおよび非パーティションユーザーテーブルの自動収集ポリシー:
テーブルに
GLOBALレベルの統計情報がない場合、自動的に統計情報を収集します。テーブルに
GLOBALレベルの統計情報がある場合、その統計情報が既に期限切れである場合、自動的に統計情報を収集します。
それ以外の場合、OceanBaseデータベースのオプティマイザーは統計情報を自動的に収集しません。
OceanBaseデータベースのパーティションユーザーテーブルの自動収集ポリシー:
テーブルに統計情報が全くない場合、すべての統計情報を自動的に収集します。
テーブルにパーティションレベルの統計情報はあるものの
GLOBALレベルの統計情報がない場合、増分方式で統計情報を自動的に収集します。テーブルに
GLOBALレベルの統計情報があるものの、それが既に期限切れである場合、すべての統計情報を自動的に収集します。テーブルに
GLOBALレベルの統計情報があるものの、すべてが期限切れではなく一部のパーティションのみの統計情報が期限切れである場合、統計情報が期限切れのパーティションの統計情報を自動的に収集するとともに、増分方式でGLOBALレベルの統計情報を推定します。
パーティションテーブルの統計情報の収集および更新ポリシー、および詳細な例については、パーティションテーブルの統計情報の収集および更新ポリシーを参照してください。