現在、OceanBaseデータベースのオプティマイザーは、DBMS_SCHEDULERシステムパッケージに基づいて実装されたMAINTENANCE_WINDOWを通じて毎日の統計情報の自動収集を実現しており、これにより統計情報の継続的な反復更新が保証されています。
メンテナンスウィンドウ
OceanBaseデータベースでは MAINTENANCE WINDOW を定義し、月曜日から日曜日までの7日間にわたり自動統計情報収集タスクを設定しています。各タスクの開始時刻は22:00で、最大収集時間は4時間です。詳細は以下の表を参照してください。
| メンテナンスウィンドウ名 | 開始時間/頻度 | 最大収集時間 |
|---|---|---|
| MONDAY_WINDOW | 22:00/週間 | 4時間 |
| TUESDAY_WINDOW | 22:00/週間 | 4時間 |
| WEDNESDAY_WINDOW | 22:00/週間 | 4時間 |
| THURSDAY_WINDOW | 22:00/週間 | 4時間 |
| FRIDAY_WINDOW | 22:00/週間 | 4時間 |
| SATURDAY_WINDOW | 22:00/週間 | 4時間 |
| SUNDAY_WINDOW | 22:00/週間 | 4時間 |
説明
- OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョン以降、メンテナンスウィンドウ
SATURDAY_WINDOWおよびSUNDAY_WINDOWのタスクのデフォルト開始時刻と最大収集時間が、デフォルト開始時刻6:00、最大収集時間20時間からデフォルト開始時刻22:00、最大収集時間4時間に変更されました。 - OceanBaseデータベースV4.2.5バージョンでは、V4.2.5 BP2バージョン以降、メンテナンスウィンドウ
SATURDAY_WINDOWおよびSUNDAY_WINDOWのタスクのデフォルト開始時刻と最大収集時間が、デフォルト開始時刻6:00、最大収集時間20時間からデフォルト開始時刻22:00、最大収集時間4時間に変更されました。
MAINTENANCE WINDOW情報のクエリ
現在、OceanBaseデータベースにおけるMAINTENANCE WINDOWはDBMS_SCHEDULERシステムパッケージに基づいて実装されています。そのため、DBMS_SCHEDULERシステムパッケージ関連のビューをクエリすることでMAINTENANCE WINDOWの関連情報を取得することも可能です。
| モード | View名 | 説明 |
|---|---|---|
| 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の2つのモードでサポートされるDML STATS情報を照会するための関連ビューとテーブル情報を示しています。
| モード | ビュー名 | 説明 |
|---|---|---|
| Oracleモード | ウェアハウステーブルに記録されたテーブルのDML統計を照会する | |
| Oracleモード | テーブル内のすべてのDML統計を照会する | |
| MySQLモード | ウェアハウステーブルに記録されたテーブルのDML統計を照会する | |
| MySQLモード | oceanbase.DBA_TAB_MODIFICATIONS | テーブル内のすべてのDML統計を照会する |
自動統計情報収集ポリシー
OceanBaseデータベースにおけるテーブルの統計情報の有効期限は、現在のテーブルの増分DML回数(前回の統計情報収集時から今回の収集時までに発生した追加・削除・変更の合計回数)が設定されたしきい値を超えた場合に切れます。しきい値のデフォルトは10%であり、このしきい値はperesで調整可能です。詳細については、収集ポリシー構成パラメータ(Prefs)管理機能を参照してください。
現在、OceanBaseデータベースのオプティマイザーによる自動統計情報収集ポリシーは以下のとおりです:
システムテーブルおよび非パーティションユーザーテーブルの自動収集ポリシー:
テーブルに
GLOBALレベルの統計情報がない場合、自動的に統計情報を収集します。テーブルに
GLOBALレベルの統計情報がある場合でも、その統計情報が既に期限切れになっている場合、自動的に統計情報を収集します。
それ以外の場合、OceanBaseデータベースのオプティマイザーは統計情報を自動的に収集しません。
OceanBaseデータベースのパーティションユーザーテーブルの自動収集ポリシー:
テーブルに統計情報が一切ない場合、すべての統計情報を自動的に収集します。
テーブルにパーティションレベルの統計情報はあるものの
GLOBALレベルの統計情報がない場合、増分方式で自動的に統計情報を収集します。テーブルに
GLOBALレベルの統計情報がある場合でも、それが既に期限切れになっている場合、すべての統計情報を自動的に収集します。テーブルに
GLOBALレベルの統計情報がある場合でも、すべてが期限切れではなく一部のパーティションの統計情報のみが期限切れになっている場合、期限切れになったパーティションの統計情報を自動的に収集すると同時に、増分方式でGLOBALレベルの統計情報を導出します。