毎日のメジャーコンパクションのトリガー時間を指定することで、定期的にメジャーコンパクションを実行することもできます。
前提条件
メジャーコンパクションをトリガーする前に、グローバルメジャーコンパクションスイッチが有効になっていることを確認する必要があります。グローバルメジャーコンパクションスイッチは、クラスタレベル構成パラメータ 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;