毎日のメジャーコンパクションのトリガー時間を指定することで、定期的にメジャーコンパクションを実行することもできます。
前提条件
メジャーコンパクションをトリガーする前に、グローバルなメジャーコンパクションスイッチが有効になっていることを確認する必要があります。グローバルなメジャーコンパクションスイッチは、クラスタレベルの構成パラメータ 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回につき1つのテナントのみを指定できます。複数のテナントを変更する場合は、このステートメントを繰り返し実行する必要があります。
obclient> ALTER SYSTEM SET major_freeze_duty_time='01:00' TENANT = tenant1;