現在、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 | ジョブ情報の確認 |
| Oracleモード | sys.ALL_VIRTUAL_TENANT_SCHEDULER_JOB_REAL_AGENT | ジョブ情報の代理テーブルの確認 |
| MySQLモード | oceanbase.DBA_SCHEDULER_JOBS | ジョブ情報の確認 |
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 STATSを照会する |
| Oracleモード | sys.ALL_VIRTUAL_MONITOR_MODIFIED_REAL_AGENT | プロキシテーブルに記録されたテーブルのDML STATSを照会する |
| Oracleモード | ALL_TAB_MODIFICATIONS、DBA_TAB_MODIFICATIONS、USER_TAB_MODIFICATIONS | テーブルのすべてのDML STATSを照会する |
| MySQLモード | oceanbase.GV$DML_STATS、oceanbase.V$DML_STATS | 仮想テーブルに記録されたテーブルのDML STATSを照会する |
| MySQLモード | oceanbase.DBA_TAB_MODIFICATIONS | テーブルのすべてのDML STATSを照会する |
自動統計情報収集ポリシー
OceanBaseデータベースにおけるテーブルの統計情報の有効期限切れの判断基準は、前回の統計情報収集以降、テーブルで発生した追加、削除、変更操作の累積影響行数が設定されたしきい値を超えた場合、統計情報は有効期限切れと判断されます。このしきい値のデフォルトはテーブル総行数の10%であり、Prefsを通じて調整可能です。詳細については、収集ポリシー構成パラメータ(PREFS)管理機能を参照してください。
現在、OceanBaseデータベースオプティマイザーの自動統計情報収集ポリシーは以下のとおりです:
システムテーブルおよび非パーティションユーザーテーブルの自動収集ポリシー:
テーブルに
GLOBALレベルの統計情報がない場合、自動的に統計情報を収集します。テーブルに
GLOBALレベルの統計情報がある場合、統計情報が有効期限切れの場合、自動的に統計情報を収集します。
それ以外の場合、OceanBaseデータベースオプティマイザーは統計情報を自動的に収集しません。
OceanBaseデータベースパーティションユーザーテーブルの自動収集ポリシー:
テーブルに統計情報がまったくない場合、すべての統計情報を自動的に収集します。
テーブルにパーティションレベルの統計情報はあるものの
GLOBALレベルの統計情報がない場合、増分方式で統計情報を自動的に収集します。テーブルに
GLOBALレベルの統計情報があるものの、それが有効期限切れの場合、すべての統計情報を自動的に収集します。テーブルに
GLOBALレベルの統計情報があるものの、すべてが有効期限切れではなく、一部のパーティションの統計情報のみが有効期限切れの場合、統計情報が有効期限切れのパーティションの統計情報を自動的に収集し、同時に増分方式でGLOBALレベルの統計情報を導出します。
パーティションテーブルの統計情報の収集と更新ポリシー、および詳細な例については、パーティションテーブルの統計情報の収集と更新ポリシーを参照してください。