OceanBaseデータベースはDBMSパッケージを提供しており、このパッケージを使用してWR関連のクラスタスナップショットを管理できます。これには、手動でスナップショットの作成、特定のスナップショットの削除、およびタイマースレッドの時間間隔を変更することでクラスタスナップショットの収集頻度を調整することが含まれます。
注意
この機能はsysテナントでのみ使用でき、アップグレード中は利用できません。
スナップショットの作成
WRは自動的にスナップショットを作成しますが、スナップショットの収集時刻を調整する必要がある場合は、手動で新しいクラスタースナップショットを作成できます。手動で作成すると、タイマーは新しく設定された時間間隔でデータを収集します。コマンドは以下のとおりです:
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(
flush_level VARCHAR(64) DEFAULT 'TYPICAL'
);
ここで、flush_level の取り得る値は現在、定期スナップショット(TYPICAL)のみをサポートしています。これは、ほとんどの統計データが収集されるのは定期スナップショットモードであることを意味します。例:
obclient(root@sys)[(none)]> CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(flush_level => 'TYPICAL');
注意
手動でスナップショットを作成すると、タイマーはリセットされます。例えば、デフォルトの間隔が1時間の場合に定期スナップショットを有効にすると:
- 12:21 タイマーが発生し、スナップショットを作成します
- 13:21 タイマーが発生し、次のスナップショットを作成します
- 13:45 ユーザーが手動でスナップショットを作成します
- 14:45 タイマーが発生し、次のスナップショットを作成します
スナップショットポリシーの設定
スナップショット間隔と保持時間の設定
スナップショット間隔と保持時間を変更することで、クラスタのスナップショット収集頻度を調整します。コマンドは以下のとおりです:
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention INT DEFAULT NULL,
interval INT DEFAULT NULL,
topnsql INT DEFAULT NULL,
sqlstat_interval INT DEFAULT NULL
);
関連フィールドの説明は以下のとおりです:
フィールド |
説明 |
|---|---|
| retention | スナップショットの保持時間です。この時間を超えるスナップショットは自動的に削除されます。単位は分です。[1440分(1日)、52560000分(100年)]の範囲です。
|
| interval | 各スナップショット間の間隔設定です。単位は分です。[10分、525600分(1年)]の範囲です。
|
| topnsql | WRデータをディスクに書き出す際に記録するSQLSTATのデータ数です。[30、50000]の範囲です。 |
| sqlstat_interval | SQLSTATスナップショットをディスクに書き出す時間間隔です。単位は分です。 |
例えば、各スナップショットの保持時間を2265分(約1日12時間)、各スナップショット間の間隔を16分に設定し、ディスクへの書き込み時に30件のSQLSTATデータを記録し、SQLSTATスナップショットのディスク書き込み時間間隔を5分に設定します。例:
obclient(root@sys)[(none)]> CALL DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS('2265','16', 30, 5);
スナップショット設定情報の確認
oceanbase.CDB_WR_CONTROLビューを使用して、すべてのテナントのWR関連設定情報を確認します。obclient(root@sys)[(none)]> SELECT * FROM oceanbase.CDB_WR_CONTROL;実行結果は次のとおりです:
+-----------+---------------+-------------+---------+ | TENANT_ID | SNAP_INTERVAL | RETENTION | TOPNSQL | +-----------+---------------+-------------+---------+ | 1 | +0 00:16:00 | +1 13:45:00 | 30 | +-----------+---------------+-------------+---------+ 1 row in set (0.018 sec)各フィールドの説明は以下のとおりです:
フィールド説明TENANT_ID - テナントID
- その他の値:ユーザーテナントまたはMetaテナントID
SNAP_INTERVAL スナップショット間の間隔設定。読みやすさのため、 DD HH:mm:SSの形式を使用しますRETENTION 各スナップショットの保持時間。読みやすさのため、 DD HH:mm:SSの形式を使用しますTOPNSQL 保存されるトップNのSQL oceanbase.CDB_WR_CONTROLビューの詳細については、oceanbase.CDB_WR_CONTROLを参照してください。oceanbase.DBA_WR_CONTROLビューを使用して、現在のテナントのWR関連設定情報を確認します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_WR_CONTROL;実行結果は次のとおりです:
+-----------+---------------+-------------+---------+ | TENANT_ID | SNAP_INTERVAL | RETENTION | TOPNSQL | +-----------+---------------+-------------+---------+ | 1 | +0 00:16:00 | +1 13:45:00 | 30 | +-----------+---------------+-------------+---------+ 1 row in set (0.003 sec)各フィールドの説明は以下のとおりです:
フィールド説明TENANT_ID - テナントID
- その他の値:ユーザーテナントまたはMetaテナントID
SNAP_INTERVAL スナップショット間の間隔設定。読みやすいように DD HH:mm:SS形式を使用しますRETENTION 各スナップショットの保持時間。読みやすいように DD HH:mm:SS形式を使用しますTOPNSQL 保存されるトップNのSQL DBA_WR_CONTROLビューの詳細については、oceanbase.DBA_WR_CONTROLおよびDBA_WR_CONTROLを参照してください。
oceanbase.CDB_WR_SNAPSHOTビューを使用して、すべてのテナントのスナップショット情報を確認します。obclient(root@sys)[(none)]> SELECT * FROM oceanbase.CDB_WR_SNAPSHOT limit 2;実行結果は次のとおりです:
+------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ | CLUSTER_ID | TENANT_ID | SNAP_ID | SVR_IP | SVR_PORT | BEGIN_INTERVAL_TIME | END_INTERVAL_TIME | SNAP_FLAG | STARTUP_TIME | +------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ | -1 | 1 | -1 | | -1 | 2026-01-26 17:06:21.291603 | 2026-01-26 17:14:13.267399 | 3 | NULL | | 10001 | 1 | 288 | xx.xx.xx.xx | 2882 | 2026-01-19 14:06:21.277509 | 2026-01-19 15:06:21.277678 | 0 | 2026-01-07 15:06:29.114149 | +------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ 1 row in set (0.004 sec)各フィールドの説明は以下のとおりです:
フィールド説明CLUSTER_ID クラスタID。 - -1:プランニングフラッシュを表す
- 通常のID:スケジュールフラッシュを表す
TENANT_ID テナントID SNAP_ID スナップショットID SVR_IP ノードIP SVR_PORT ノードPORT BEGIN_INTERVAL_TIME スナップショット開始時間。タイムスタンプはミリ秒単位です。 END_INTERVAL_TIME スナップショット終了時間。タイムスタンプはミリ秒単位です。 SNAP_FLAG スナップショットのトリガー原因 STARTUP_TIME プロセス起動時間。タイムスタンプはミリ秒単位です。 oceanbase.CDB_WR_SNAPSHOTビューの詳細については、oceanbase.CDB_WR_SNAPSHOTを参照してください。
oceanbase.DBA_WR_SNAPSHOTビューを使用して、現在のテナントのスナップショット情報を確認します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_WR_SNAPSHOT limit 1;実行結果は次のとおりです:
+------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ | CLUSTER_ID | TENANT_ID | SNAP_ID | SVR_IP | SVR_PORT | BEGIN_INTERVAL_TIME | END_INTERVAL_TIME | SNAP_FLAG | STARTUP_TIME | +------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ | -1 | 1 | -1 | | -1 | 2026-01-27 09:08:37.198784 | 2026-01-27 10:08:37.204496 | 3 | NULL | | 10001 | 1 | 1 | xx.xx.xx.xx | 2882 | 2026-01-26 19:08:37.239165 | 2026-01-26 19:08:37.239165 | 0 | 2026-01-26 18:08:42.168066 | +------------+-----------+---------+----------------+----------+----------------------------+----------------------------+-----------+----------------------------+ 1 row in set (0.004 sec)各フィールドの説明は以下のとおりです:
フィールド説明CLUSTER_ID クラスタID TENANT_ID テナントID SNAP_ID スナップショットID SVR_IP ノードIP SVR_PORT ノードPORT BEGIN_INTERVAL_TIME スナップショット開始時間。タイムスタンプはミリ秒単位です。 END_INTERVAL_TIME スナップショット終了時間。タイムスタンプはミリ秒単位です。 SNAP_FLAG スナップショットのトリガー原因 STARTUP_TIME プロセス起動時間。タイムスタンプはミリ秒単位です。 DBA_WR_SNAPSHOTビューの詳細については、oceanbase.DBA_WR_SNAPSHOTおよびDBA_WR_SNAPSHOTを参照してください。
スナップショットの削除
注意
- 削除するスナップショットIDがシステム内に有効に存在するIDであることを確認してください。
- 削除操作を実行すると、指定された範囲内のスナップショットデータは完全に削除されます。慎重に操作してください。
削除するスナップショットの範囲の開始および終了スナップショットIDを指定し、指定範囲内のスナップショットデータを削除します。コマンドは以下のとおりです:
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
low_snap_id INT,
high_snap_id INT
);
関連フィールドの説明は以下のとおりです:
フィールド |
説明 |
|---|---|
| low_snap_id | 削除するスナップショットの開始スナップID |
| high_snap_id | 削除するスナップショットの終了スナップID |
スナップショットの削除手順は以下のとおりです:
まず、テナント内のすべてのSNAP_IDを取得します。
obclient(root@sys)[(none)]> select count(1),min(snap_id), max(snap_id) from oceanbase.DBA_WR_SNAPSHOT;実行結果は次のとおりです:
+-----------+--------------+--------------+ | count(1) | min(snap_id) | max(snap_id) | +-----------+--------------+--------------+ | 1 | 2 | 2 | +-----------+--------------+--------------+ 1 row in set (0.039 sec)SNAP_IDの範囲内のスナップショットデータを削除します。
obclient(root@sys)[(none)]> CALL DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE('2','2'); Query OK, 0 rows affected (1.018 sec)SNAP_IDが正常に削除されたかどうかを確認します。
obclient(root@sys)[(none)]> select count(1),min(snap_id), max(snap_id) from oceanbase.DBA_WR_SNAPSHOT;