MAJOR FREEZE コマンドでメジャーコンパクションをトリガーすると、システムが自動的にコンパクションタスクをスケジュールします。OceanBaseデータベースV2.x.xおよびV3.x.xバージョンとは異なり、OceanBaseデータベースV4.0.x以降では、統一されたコンパクション戦略に基づいてコンパクションプロセスが実行されます。つまり、テナントのすべてのゾーンが同時にコンパクションを開始し、すべてのゾーンのコンパクションが完了した後に初めて、そのテナントのコンパクションが完了したことになります。
コンパクション中は、各ゾーンのコンパクション順序などを手動で制御する必要はなく、またローテーションコンパクションも存在しません。コンパクション中にエラーが発生した場合は、本記事を参照してマニュアルによるコンパクションの制御を行うことができます。例えば、チェックサム検証エラーが発生した場合、そのテナントの現在のラウンドのコンパクションは終了できません。この場合、現在のコンパクションを一時停止(suspend merge)し、チェックサムが正常に復旧した後(例えば、人の手による介入修復など)、チェックサムエラーのマークをクリア(clear merge error)、その後現在のラウンドのコンパクションを再開(resume merge)します。
前提条件
手動でメジャーコンパクションを実行する前に、MAJOR FREEZE コマンドでメジャーコンパクションがトリガーされていることを確認してください。手動でメジャーコンパクションをトリガーする詳細な操作については、手動でのメジャーコンパクションのトリガーを参照してください。
注意事項
メジャーコンパクションタスクが一時停止されている場合、テナントレベルのコンパクションの開始は許可されますが、パーティションレベルのコンパクションの開始は許可されません。メジャーコンパクションタスクが一時停止されている間に開始されたテナントレベルのコンパクションについては、システムは即座にこのテナントレベルのコンパクションタスクを実行せず、メジャーコンパクションが再開されてから実行します。
システムテナントによる手動コンパクションの制御
コンパクションが開始された後、システムテナントはすべてのテナントまたは指定されたテナントのコンパクション操作を制御できます。制御可能なコンパクション操作には、テナントレベルのコンパクションとパーティションレベルのコンパクションが含まれます。
具体的な操作は以下のとおりです:
rootユーザーでクラスタのsysテナントにログインします。ビジネスの実際の状況に応じて、適切なコマンドを選択してコンパクションを制御します。
すべてのユーザーテナント、すべてのMetaテナント、または指定されたテナントのコンパクションを一時停止する
コンパクション開始後、すべてのユーザーテナント、すべてのMetaテナント、または指定されたテナントのコンパクションを一時停止する必要がある場合は、以下のステートメントを実行します。
すべてのユーザーテナントのコンパクションを一時停止する
ALTER SYSTEM SUSPEND MERGE TENANT = all_user;または
ALTER SYSTEM SUSPEND MERGE TENANT = all;説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allの意味は同じであり、すべてのユーザーテナントに対して有効範囲を設定する必要がある場合は、TENANT = all_userを使用することを推奨します。今後TENANT = allは廃止され、使用されなくなります。すべてのMetaテナントのコンパクションを一時停止する
ALTER SYSTEM SUSPEND MERGE TENANT = all_meta;指定されたテナントのコンパクションを一時停止する
ALTER SYSTEM SUSPEND MERGE TENANT = tenant1,tenant2;
ここで、
=はオプションです。tenant1、tenant2は実際のテナント名に置き換える必要があります。コンパクションを再開する
コンパクションを一時停止した後、再開することもできます。ステートメントは以下のとおりです。
すべてのユーザーテナントのコンパクションを再開する
ALTER SYSTEM RESUME MERGE TENANT = all_user;または
ALTER SYSTEM RESUME MERGE TENANT = all;説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allの意味は同じであり、すべてのユーザーテナントに対して有効範囲を設定する必要がある場合は、TENANT = all_userを使用することを推奨します。今後TENANT = allは廃止され、使用されなくなります。すべてのMetaテナントのコンパクションを再開する
ALTER SYSTEM RESUME MERGE TENANT = all_meta;指定されたテナントのコンパクションを再開する
ALTER SYSTEM RESUME MERGE TENANT = tenant1,tenant2;
ここで、
=はオプションです。tenant1、tenant2は実際のテナント名に置き換える必要があります。Checksumエラーのマークをクリーンアップする
コンパクション中にChecksum検証エラーが発生し、人の手によって修正された後、そのChecksumエラーのマークをクリーンアップしてコンパクションを再開することができます。ステートメントは以下のとおりです。
すべてのユーザーテナントのChecksumエラーのマークをクリーンアップする
ALTER SYSTEM CLEAR MERGE ERROR TENANT = all_user;または
ALTER SYSTEM CLEAR MERGE ERROR TENANT = all;説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allの意味は同じであり、すべてのユーザーテナントに対して有効範囲を設定する必要がある場合は、TENANT = all_userを使用することを推奨します。今後TENANT = allは廃止され、使用されなくなります。すべてのMetaテナントのChecksumエラーのマークをクリーンアップする
ALTER SYSTEM CLEAR MERGE ERROR TENANT = all_meta;指定されたテナントのChecksumエラーのマークをクリーンアップする
ALTER SYSTEM CLEAR MERGE ERROR TENANT = tenant1,tenant2;
ここで、
=はオプションです。tenant1、tenant2は実際のテナント名に置き換える必要があります。
ユーザーテナントによる手動コンパクションの制御
コンパクションが開始された後、ユーザーテナントは自身のテナントに対するコンパクション操作のみを制御できます。制御可能なコンパクション操作には、テナントレベルのコンパクションとパーティションレベルのコンパクションが含まれます。
ユーザーテナントのテナント管理者がデータベースにログインします。
ビジネスの実際の状況に応じて、適切なコマンドを選択してコンパクションを制御します。
テナントのコンパクションの一時停止
コンパクションが開始された後、必要に応じてテナントのコンパクションを一時停止する場合は、以下のステートメントを実行します。
obclient> ALTER SYSTEM SUSPEND MERGE;コンパクションの再開
コンパクションを一時停止した後、再開することもできます。
ステートメントは以下のとおりです:
obclient> ALTER SYSTEM RESUME MERGE;Checksumエラーのマークのクリア
コンパクション中にChecksum検証エラーが発生し、人の手による介入修復後、そのChecksumエラーのマークをクリアしてコンパクションを再開できます。
ステートメントは以下のとおりです:
obclient> ALTER SYSTEM CLEAR MERGE ERROR;