定期的なパーティションのバランス調整タスクを設定するほかに、DBMS_BALANCE システムパッケージの TRIGGER_PARTITION_BALANCE サブプログラムを手動で呼び出して、一時的なパーティションのバランス調整をトリガーすることもできます。
使用制限
ユーザーテナントのみがパーティションの手動バランス調整をサポートしており、sysテナントはサポートしていません。
注意事項
システム内で他のバランス調整タスクが実行されている場合は、パーティションの手動バランス調整タスクをトリガーできません。現在のバランス調整タスクが完了するまで待ってから、手動でのパーティションのバランス調整操作を実行してください。
sysテナントはビュー CDB_OB_BALANCE_JOBS を使用して、指定したテナントで他の進行中のバランス調整タスクがあるかどうかを確認できます。ユーザーテナントは DBA_OB_BALANCE_JOBS ビューを使用して、他の進行中のバランス調整タスクがあるかどうかを確認できます。
パーティションの手動バランス調整を実行する前に、テナントレベルの構成パラメータ
enable_rebalanceとenable_transferの値がどちらもTrueであることを確認する必要があります。いずれか一方のパラメータの値がTrueでない場合、パーティションの手動バランス調整コマンドは実行失敗します。現在のテナントのパーティションがすでにバランスが取れている場合、システムは
partitions are already balanced, no need to trigger partition balanceのエラーメッセージを表示します。
パーティションの手動バランス調整のトリガー
テナント管理者がクラスタのMySQLテナントまたはOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に従ってください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -ADBMS_BALANCEシステムパッケージのTRIGGER_PARTITION_BALANCEサブプログラムを呼び出して、一時的なパーティションのバランス調整をトリガーします。MySQLモードOracleモードMySQLモードのステートメントは以下のとおりです:
CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout);ここで、
balance_timeoutはバックグラウンドのパーティションバランス調整タスクの実行タイムアウト時間を秒単位で制御します。この値を指定しない場合、バックグラウンドのパーティションバランス調整タスク(手動でトリガーされたものと定期的にトリガーされたものの両方)にはタイムアウト時間がなく、タスクが完了するまで継続的に実行されます。例:
パーティションのバランスを一度だけ手動でトリガーし、バックグラウンドのパーティションバランス調整タスクにタイムアウト時間を設定しない場合。
obclient [oceanbase]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();パーティションのバランスを1回トリガーし、バックグラウンドのパーティションバランスタスクのタイムアウト時間を7200秒に設定します。
obclient [oceanbase]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200);
DBMS_BALANCEシステムパッケージのTRIGGER_PARTITION_BALANCEサブプログラムの詳細については、TRIGGER_PARTITION_BALANCEを参照してください。Oracleモードのステートメントは以下のとおりです:
BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout); END;ここで、
balance_timeoutはバックグラウンドのパーティションバランスタスクの実行タイムアウト時間を制御するために使用され、単位は秒です。この値を指定しない場合、手動でトリガーされたものとタイマーでトリガーされたものを含む、すべてのバックグラウンドのパーティションバランスタスクにはタイムアウト時間がなく、タスクが完了するまで継続的に実行されます。例:
パーティションのバランスを1回トリガーし、バックグラウンドのパーティションバランスタスクにタイムアウト時間を設定しません。
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(); END;//obclient [SYS]> DELIMITER ;パーティションのバランスを1回トリガーし、バックグラウンドのパーティションバランスタスクのタイムアウト時間を7200秒に設定します。
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200); END;//obclient [SYS]> DELIMITER ;
DBMS_BALANCEシステムパッケージのTRIGGER_PARTITION_BALANCEサブプログラムの詳細については、TRIGGER_PARTITION_BALANCEを参照してください。
次のステップ
手動でパーティションのバランスをトリガーした後、実際のパーティション移動はバックグラウンドのバランスタスクによって非同期で実行されます。ユーザーはビューを通じてパーティションバランスタスクの実行状況を確認できます。具体的な操作については、バックグラウンドのパーティションバランスタスクの確認を参照してください。