OceanBaseデータベースでは、ユーザーテナント作成時にシステム組み込みの定期パーティション均衡タスク SCHEDULED_TRIGGER_PARTITION_BALANCE が設定されており、デフォルトで毎日00:00に1回パーティションの均衡処理が実行されます。ユーザーは DBMS_SCHEDULER システムパッケージのサブプログラムを使用して、この定期パーティション均衡タスクの各種パラメータを設定できます。
使用上の制限
システムテナント(sysテナント)では、定期パーティション均衡タスクの設定をサポートしていません。
定期パーティション均衡タスクの有効化
現在のバージョンで新規作成されたユーザーテナントでは、定期パーティション均衡タスクはデフォルトで有効な状態になっており、再度有効にする必要はありません。V4.2.3以前のバージョンから現在のバージョンにアップグレードしたユーザーテナントでは、定期パーティション均衡タスクはデフォルトで無効な状態になっています。ユーザーは以下の手順を参照して、定期パーティション均衡タスクを有効にできます。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aテナントレベル構成パラメータ
partition_balance_schedule_intervalの値が0sかどうか確認します。定期パーティション均衡タスク
SCHEDULED_TRIGGER_PARTITION_BALANCEを有効にする前に、自動トリガーによるパーティション均衡タスクが無効であることを確認する必要があります。つまり、テナントレベル構成パラメータpartition_balance_schedule_intervalの値が0である必要があります。テナントレベル構成パラメータ
partition_balance_schedule_intervalが0sかどうか確認し、0sでない場合は、その値を0sに設定します。ステートメントは以下のとおりです。obclient> SHOW PARAMETERS LIKE '%partition_balance_schedule_interval%';obclient> ALTER SYSTEM SET partition_balance_schedule_interval='0s';DBMS_SCHEDULERシステムパッケージのENABLEサブプログラムを呼び出し、定期パーティション均衡タスクSCHEDULED_TRIGGER_PARTITION_BALANCEを有効にします。MySQLモードOracleモードMySQLモードのテナントで定期パーティション均衡タスクを有効にする例は以下のとおりです:
obclient [oceanbase]> CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');Oracleモードのテナントで定期パーティション均衡タスクを有効にする例は以下のとおりです:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE'); END;//obclient [SYS]> DELIMITER ;ENABLEサブプログラムの詳細については、ENABLEを参照してください。
定期パーティション均衡タスクの無効化
現在のバージョンで新規作成されたユーザーテナントでは、定期パーティション均衡タスクはデフォルトで有効な状態になっていますが、ビジネスニーズに応じて無効にすることもできます。定期パーティション均衡タスクを無効にした後でも、自動トリガー(構成パラメータpartition_balance_schedule_intervalを0sより大きい値に設定する)または手動トリガーにより、パーティション均衡タスクを開始できます。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_SCHEDULERシステムパッケージのDISABLEサブプログラムを呼び出し、定期パーティションバランスタスクSCHEDULED_TRIGGER_PARTITION_BALANCEを無効にします。MySQLモードOracleモードMySQLモードのテナントで定期パーティションバランスタスクを無効にする例は以下のとおりです:
obclient [oceanbase]> CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');Oracleモードのテナントで定期パーティションバランスタスクを無効にする例は以下のとおりです:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE'); END;//obclient [SYS]> DELIMITER ;DISABLEサブプログラムの詳細については、DISABLEを参照してください。
定期パーティションバランスタスクのスケジュール時間の調整
定期パーティションバランスタスクを有効にすると、システムはデフォルトで毎日00:00にパーティションのバランスを取ります。ユーザーは必要に応じて変更できます。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_SCHEDULERシステムパッケージのSET_ATTRIBUTEサブプログラムを呼び出し、パーティションバランスタスクの次回のスケジュール時間を調整します。例えば、次回01:00にパーティションのバランスを取るように調整します。MySQLモードOracleモードMySQLモードのテナントで定期パーティションバランスタスクの実行時間を
2024-06-12 01:00:00に調整する例は以下のとおりです:obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '2024-06-12 01:00:00');Oracleテナントで定期パーティション均等化タスクの実行時間を
12-Jun-2024 01:00:00に調整する例は以下のとおりです:obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '12-Jun-2024 01:00:00'); END;//obclient [SYS]> DELIMITER ;SET_ATTRIBUTEサブプログラムの詳細については、SET_ATTRIBUTEを参照してください。
定期パーティション均等化タスクのスケジューリング頻度の調整
デフォルトでは、定期パーティション均等化タスクのスケジューリング頻度は1日1回ですが、必要に応じて変更できます。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりですが、データベースへの接続時は実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_SCHEDULERシステムパッケージのSET_ATTRIBUTEサブプログラムを呼び出し、パーティション均等化タスクのスケジューリング頻度を調整します。例えば、2日に1回パーティション均等化をトリガーするように調整します。MySQLモードOracleモードステートメントは以下のとおりです:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value');ここで:
FREQ:スケジューリング頻度の時間単位を指定するために使用されます。サポートされている値はMINUTELY(分)、HOURLY(時間)、DAILY(日)、およびWEEKLY(週)です。INTERVAL:具体的な数値、つまりいくつの単位時間ごとにタスクを1回トリガーするかを指定するために使用されます。例えば、FREQ=DAILY; INTERVAL=2は2日に1回タスクをトリガーすることを意味します。
MySQLテナントで定期パーティション均等化タスクの実行頻度を2日に1回に調整する例は以下のとおりです:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2');ステートメントは以下のとおりです:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value'); END;ここで:
FREQ:スケジューリング頻度の時間単位を指定するために使用されます。サポートされている値はMINUTELY(分)、HOURLY(時間)、DAILY(日)、およびWEEKLY(週)です。INTERVAL:具体的な数値、つまりいくつの単位時間ごとにタスクを1回トリガーするかを指定するために使用されます。例えば、FREQ=DAILY; INTERVAL=2は2日に1回タスクをトリガーすることを意味します。
Oracleテナントで定期パーティションの均等化タスクの実行頻度を2日ごとに1回に調整する例は以下のとおりです:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2'); END;//obclient [SYS]> DELIMITER ;SET_ATTRIBUTEサブプログラムの詳細については、SET_ATTRIBUTEを参照してください。
定期パーティションバランス調整タスクの1回あたりのタスク実行タイムアウト時間の調整
デフォルトでは、定期パーティションバランス調整タスクの1回あたりのタスク実行にはタイムアウト時間の制限がありません。ユーザーは業務の実際の状況に応じて変更する必要があります。
定期パーティションバランス調整タスクの1回あたりのタスク実行タイムアウト時間を調整することは、実際には TRIGGER_PARTITION_BALANCE サブプログラムを呼び出してトリガーされるすべてのバックグラウンドパーティションバランス調整タスクの実行タイムアウト時間を調整することになるため、この値を調整すると手動でトリガーされるパーティションバランス調整タスクにも影響します。手動でパーティションバランスをトリガーする詳細な操作については、パーティションバランスタスクの手動トリガーを参照してください。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりですが、データベースへの接続時は実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_SCHEDULERシステムパッケージのSET_ATTRIBUTEサブプログラムを呼び出し、1回あたりのタスク実行のタイムアウト時間を調整します。MySQLモードOracleモードステートメントは以下のとおりです:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)');ここで、
balance_timeoutは1回あたりのタスク実行のタイムアウト時間を秒単位で指定します。この値が空の場合、バックグラウンドのバランス調整タスクにタイムアウト時間がないことを意味します。MySQLモードのテナントで1回あたりのタスク実行のタイムアウト時間を7200秒に調整する例は以下のとおりです:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)');ステートメントは以下のとおりです:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)'); END;ここで、
balance_timeoutは1回あたりのタスク実行のタイムアウト時間を秒単位で指定します。この値が空の場合、バックグラウンドのバランス調整タスクにタイムアウト時間がないことを意味します。Oracleモードのテナントで1回あたりのタスク実行のタイムアウト時間を7200秒に調整する例は以下のとおりです:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)'); END;//obclient [SYS]> DELIMITER ;SET_ATTRIBUTEサブプログラムの詳細については、SET_ATTRIBUTEを参照してください。
パーティションバランスをトリガーするステートメントの最大実行時間の調整
デフォルトで、パーティションバランスをトリガーするステートメントの最大実行時間は7200秒、つまり2時間です。この値を変更することは推奨されません。
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_SCHEDULERシステムパッケージのSET_ATTRIBUTEサブプログラムを呼び出し、パーティションの均衡をトリガーするステートメントの最大実行時間を調整します。MySQLモードOracleモードステートメントは以下のとおりです:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time');ここで、
max_timeはパーティションの均衡をトリガーするステートメントの最大実行時間を秒単位で指定するために使用されます。MySQLモードのテナントで、パーティションの均衡をトリガーするステートメントの最大実行時間を3600秒(1時間)に調整する例は以下のとおりです:
obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600');ステートメントは以下のとおりです:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time'); END;ここで、
max_timeはパーティションの均衡をトリガーするステートメントの最大実行時間を秒単位で指定するために使用されます。Oracleモードのテナントで、パーティションの均衡をトリガーするステートメントの最大実行時間を3600秒(1時間)に調整する例は以下のとおりです:
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600'); END;//obclient [SYS]> DELIMITER ;SET_ATTRIBUTEサブプログラムの詳細については、SET_ATTRIBUTEを参照してください。
次のステップ
スケジュールタスクは、パーティションの均衡タスクをトリガーするためだけに使用されます。トリガー条件が満たされると、システムは自動的にパーティションの均衡タスクをトリガーします。パーティションの均衡タスクがトリガーされた後:
ビューを使用して、スケジュールされたパーティションの均衡タスクのトリガー履歴を確認できます。具体的な操作については、スケジュールされたパーティションの均衡タスクのトリガー履歴を確認するを参照してください。
実際のパーティション移動は、バックグラウンドの均衡タスクによって非同期で実行されます。ビューを使用して、パーティションの均衡タスクの実行プロセスを確認できます。具体的な操作については、バックグラウンドのパーティションの均衡タスクを確認するを参照してください。
説明
パーティションの再分散タスクが正常にトリガーされた後、テナントレベルの構成パラメータ
enable_rebalanceまたはenable_transferの値がTrue以外の場合、この定期タスクは実行失敗します。