手動で統計情報を収集するほかに、現在OceanBaseデータベースのオプティマイザーは MAINTENANCE WINDOW を通じて毎日の統計情報の自動収集を行い、統計情報が反復的に更新されることを保証しています。ネイティブOracleと同様に、OceanBaseデータベースのオプティマイザーは月曜日から日曜日までの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 |
説明
- 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時間に変更されました。
自動統計情報収集の実行状況を照会する
現在、OceanBaseデータベースのオプティマイザーは、自動統計収集の実行状況を照会するための以下のビューを提供しています。
モード |
ビュー名 |
説明 |
|---|---|---|
| Oracle | DBA_SCHEDULER_JOBS |
ジョブ情報のクエリ |
| Oracle | ALL_SCHEDULER_WINDOWS、DBA_SCHEDULER_WINDOWS |
メンテナンスウィンドウ実行情報のクエリ |
| MySQL | OCEANBASE.DBA_SCHEDULER_JOBS |
ジョブ情報のクエリ |
| MySQL | OCEANBASE.DBA_SCHEDULER_WINDOWS |
メンテナンスウィンドウ実行情報のクエリ |
DBA_SCHEDULER_JOBS ビューについては、主に以下のフィールドを確認します:
JOB_NAME:メンテナンスウィンドウタスクの名前。LAST_START_DATE:前回のメンテナンスウィンドウタスクの実行日時。NEXT_RUN_DATE:次回のメンテナンスウィンドウタスクの実行日時。ENABLED:現在のメンテナンスウィンドウタスクが有効かどうか。FAILURE_COUNT:メンテナンスウィンドウタスクの失敗回数。0以外の場合は、OceanBaseサポートチームに連絡し、トラブルシューティングを依頼する必要があります。MAX_RUN_DURATION:メンテナンスウィンドウタスクの最大持続時間。デフォルト単位は秒です。
自動統計情報収集の属性を変更する
ユーザーは自身のビジネス特性に応じて、自動統計情報収集の開始時刻や収集時間などの属性を変更する必要があることを考慮し、OceanBaseデータベースのオプティマイザーは以下の方法で自動統計情報収集の属性を変更できるようにしています。
自動統計情報タスクの収集を禁止する。
OceanBaseデータベースでは、システムパッケージDBMS_SCHEDULER.DISABLEを使用して、自動統計情報タスクの収集を禁止できます。
例:
MySQLモードOracleモード月曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('MONDAY_WINDOW');火曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('TUESDAY_WINDOW');水曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('WEDNESDAY_WINDOW');木曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('THURSDAY_WINDOW');金曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('FRIDAY_WINDOW');土曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('SATURDAY_WINDOW');日曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('SUNDAY_WINDOW');
注意
Oracleモードのユーザーテナントで以下のステートメントを実行する場合は、対応するsysユーザーを使用して実行する必要があります。
月曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('MONDAY_WINDOW');火曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('TUESDAY_WINDOW');水曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('WEDNESDAY_WINDOW');木曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('THURSDAY_WINDOW');金曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('FRIDAY_WINDOW');土曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('SATURDAY_WINDOW');日曜日の自動統計情報収集を禁止します。
CALL DBMS_SCHEDULER.DISABLE('SUNDAY_WINDOW');
自動統計情報タスクの収集を有効にする。
OceanBaseデータベースでは、システムパッケージDBMS_SCHEDULER.ENABLEを使用して、自動統計情報タスクの収集を有効にできます。
例:
MySQLモードOracleモード月曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('MONDAY_WINDOW');火曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('TUESDAY_WINDOW');水曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('WEDNESDAY_WINDOW');木曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('THURSDAY_WINDOW');金曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('FRIDAY_WINDOW');土曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('SATURDAY_WINDOW');日曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('SUNDAY_WINDOW');
注意
Oracleモードのユーザーテナントで以下のステートメントを実行する場合は、対応するsysユーザーを使用して実行する必要があります。
月曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('MONDAY_WINDOW');火曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('TUESDAY_WINDOW');水曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('WEDNESDAY_WINDOW');木曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('THURSDAY_WINDOW');金曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('FRIDAY_WINDOW');土曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('SATURDAY_WINDOW');日曜日の統計情報の自動収集を有効にします。
CALL DBMS_SCHEDULER.ENABLE('SUNDAY_WINDOW');
自動統計情報収集のスケジュール時間を調整する。
OceanBaseデータベースの自動収集タスクは
DBMS_SCHEDULERに基づいて実装されているため、DBMS_SCHEDULER.SET_ATTRIBUTEを使用して、自動統計情報のスケジュール時間を調整できます。注意
ウィンドウの次回実行時間は、実際の曜日に合わせて設定する必要があります。
例:
MySQLモードOracleモード例えば、現在が2024年3月7日木曜日の午前11時である場合、金曜日の午前2時から統計情報の自動収集を開始するように調整する必要があります。
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW', 'NEXT_DATE', '2024-03-11 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW', 'NEXT_DATE', '2024-03-12 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW', 'NEXT_DATE', '2024-03-13 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW', 'NEXT_DATE', '2024-03-14 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW', 'NEXT_DATE', '2024-03-08 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW', 'NEXT_DATE', '2024-03-09 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW', 'NEXT_DATE', '2024-03-10 02:00:00');注意
Oracleモードのユーザーテナントで以下のステートメントを実行する場合は、対応するsysユーザーを使用して実行する必要があります。
日付形式を設定します。
SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';タイムスタンプ形式を設定します。
SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF';時差を含むタイムスタンプ形式を設定します。
SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SS.FF TZR TZD';現在が2024年3月7日、木曜日の午前11時である場合、金曜日の午前2時から統計情報の自動収集を開始するように調整する必要があります。
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW', 'NEXT_DATE', '2024-03-11 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW', 'NEXT_DATE', '2024-03-12 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW', 'NEXT_DATE', '2024-03-13 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW', 'NEXT_DATE', '2024-03-14 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW', 'NEXT_DATE', '2024-03-08 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW', 'NEXT_DATE', '2024-03-09 02:00:00'); CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW', 'NEXT_DATE', '2024-03-10 02:00:00');
自動統計情報収集の動作メカニズム
上記では、自動統計情報収集に関連する MAINTENANCE WINDOW の内容について説明しましたが、自動統計情報収集のタスク開始後の動作メカニズムはどのようなものでしょうか。次の図は、自動統計情報収集の動作メカニズムを示しています。

上記の自動統計情報収集において、テーブルの統計情報が期限切れかどうかを判断する主な基準は、前回の統計情報収集時から今回の収集時までの間にそのテーブルで行われた追加/削除/変更の割合です。デフォルト値は10%です。注意点として、この変化率はパーティションレベルであることです。例えば、パーティションテーブルの特定のパーティションで追加/削除/変更の割合が10%を超えた場合、そのパーティションの統計情報も再収集されます。もちろん、デフォルトの変化率は設定可能であり、業務の実際の状況に応じて perfs を調整することができます。具体的な方法については、統計情報収集戦略の設定 のセクションを参照してください。さらに、OceanBaseデータベースのオプティマイザーは、テーブルの追加/削除/変更回数を照会するための関連ビューも提供しています。以下のように:
モード |
ビュー名 |
説明 |
|---|---|---|
| Oracle | ALL_TAB_MODIFICATIONS |
テーブルのすべてのDML統計を照会する |
| Oracle | DBA_TAB_MODIFICATIONS |
テーブルのすべてのDML統計を照会する |
| Oracle | USER_TAB_MODIFICATIONS |
テーブルのすべてのDML統計を照会する |
| MySQL | OCEANBASE.DBA_TAB_MODIFICATIONS |
テーブルのすべてのDML統計を照会する |