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に設定します。ステートメントは以下のとおりです。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:具体的な数値を指定し、いくつの時間単位ごとにタスクを実行するかを示します。例えば、FREQ=DAILY; INTERVAL=2は、2日ごとにタスクを実行することを意味します。
MySQLモードのテナントで、定期パーティションの均衡タスクの実行頻度を2日ごとに調整する例を以下に示します:
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:具体的な数値、つまり、いくつの時間単位ごとにタスクをトリガーするかを指定します。例えば、FREQ=DAILY; INTERVAL=2は、2日ごとにタスクを1回トリガーすることを意味します。
Oracleモードのテナントで、定期パーティションのバランシングタスクの実行頻度を2日ごとに調整する例は以下のとおりです:
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は単一タスク実行のタイムアウト時間を秒単位で指定します。この値が空の場合、バックグラウンドのバランシングタスクにタイムアウト時間がないことを意味します。MySQLモードのテナントで、単一タスク実行のタイムアウト時間を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は単一タスク実行のタイムアウト時間を秒単位で指定します。この値が空の場合、バックグラウンドのバランシングタスクにタイムアウト時間がないことを意味します。Oracleモードのテナントで、単一タスク実行のタイムアウト時間を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を参照してください。
パーティション不均衡をトリガーするステートメントの最大実行時間の調整
デフォルトで、パーティション不均衡をトリガーするステートメントの最大実行時間は7,200秒、つまり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以外の場合、そのスケジュールタスクは失敗します。