定期的なパーティションのバランス調整タスクを設定するほかに、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はバックグラウンドのパーティション均衡タスクの実行におけるタイムアウト時間を制御するために使用され、単位は秒です。この値を指定しない場合、手動でトリガーされたものと定期的にトリガーされたものを含む、すべてのバックグラウンドのパーティション均衡タスクにはタイムアウト時間がなく、タスクが完了するまで継続的に実行されます。例:
パーティション均衡を1回トリガーし、バックグラウンドのパーティション均衡タスクにタイムアウト時間を設定しません。
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を参照してください。
次のステップ
手動でパーティションの均等化をトリガーした後、実際のパーティション移動はバックグラウンドの均等化タスクによって非同期で実行されます。ユーザーはビューを通じてパーティション均等化タスクの実行状況を確認できます。詳細な操作については、バックグラウンドのパーティション均等化タスクの表示を参照してください。