毎日のメジャーコンパクションのトリガー時間を指定することで、定期的にメジャーコンパクションを実行することもできます。
前提条件
メジャーコンパクションをトリガーする前に、グローバルなメジャーコンパクションスイッチが有効になっていることを確認する必要があります。グローバルなメジャーコンパクションスイッチは、クラスタレベルの構成パラメータ enable_major_freeze によって制御され、デフォルト値は True であり、これはコンパクションスイッチが有効であることを示します。
現在のクラスタでグローバルなメジャーコンパクションスイッチが有効になっていない場合は、以下の手順に従って有効にしてください。
rootユーザーでクラスタのsysテナントにログインします。グローバルなメジャーコンパクションスイッチが有効になっているかどうかを確認します。
obclient> SHOW PARAMETERS LIKE 'enable_major_freeze';有効になっていない場合は、以下のステートメントを実行してコンパクションスイッチを有効にします。
obclient> ALTER SYSTEM SET enable_major_freeze='True';パラメータ
enable_major_freezeの詳細については、enable_major_freezeを参照してください。
定期的なメジャーコンパクションのトリガー条件
グローバルなメジャーコンパクションスイッチを有効にすると、メジャーコンパクションの定期的なトリガー条件は、システム時間が毎日のメジャーコンパクションのタイミングポイントに達するたびに、自動的にメジャーコンパクションがトリガーされることです。毎日のメジャーコンパクションのタイミングポイントは、パラメータ major_freeze_duty_time によって制御され、OCP上でも変更可能です。デフォルトでは毎日 02:00 にメジャーコンパクションが実行されます。
major_freeze_duty_time およびその他のメジャーコンパクション関連パラメータの説明と設定については、メジャーコンパクション設定の変更を参照してください。
SQLステートメントによる日次コンパクションのトリガー時間の指定
rootユーザーでクラスタのsysテナントにログインします。以下のステートメントを実行して、日次コンパクションのトリガー時間を変更します。
このテナントの日次コンパクションのトリガー時間を変更する
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00';すべてのユーザーテナントの日次コンパクションのトリガー時間を変更する
テナント数が多い場合、すべてのユーザーテナントのコンパクションのトリガー時間が同じであると、CPU利用率が急激に上昇する可能性があります。CPU利用率が急激に上昇した場合は、各ユーザーテナントの日次コンパクション時間を異なる時間に設定することを推奨します。
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00' TENANT = all_user;または
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00' TENANT = all;説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allは意味が同じであり、有効範囲がすべてのユーザーテナントになる場合は、TENANT = all_userの使用を推奨します。今後、TENANT = allは廃止され、使用されなくなります。すべてのMetaテナントの日次コンパクションのトリガー時間を変更する
テナント数が多い場合、すべてのMetaテナントのコンパクションのトリガー時間が同じであると、CPU利用率が急激に上昇する可能性があります。CPU利用率が急激に上昇した場合は、各Metaテナントの日次コンパクション時間を異なる時間に設定することを推奨します。
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00' TENANT = all_meta;指定されたテナントの日次コンパクションのトリガー時間を変更する
以下のステートメントは一度に1つのテナントのみを指定できます。複数のテナントを変更する場合は、このステートメントを繰り返し実行する必要があります。
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00' TENANT = tenant1;