各テナントは同一時刻に1つのロードバランシングジョブ(Balance Job)しか実行できません。現在進行中のバランスジョブがビジネスニーズに合致しない場合、そのタスクをキャンセルできます。また、パーティション転送を開始したものの、現在実行中のバランスジョブによりパーティション転送タスクのスケジューリングが遅延している場合は、現在のバランスジョブをキャンセルすることができます。
使用制限
Balance Jobのキャンセル操作は、プライマリデータベース(すなわちプライマリテナント)でのみ実行できます。
背景
各テナントは同一時刻に一つのロードバランシングジョブ(JOB)しか実行できません。これらのロードバランシングジョブには、スケールアウト、スケールイン、移行バランシング、パーティションバランシングなどが含まれます。各ロードバランシングジョブは複数のロードバランシングタスク(Task)を生成し、ロードバランシングの具体的な操作を実現します。Balance Jobをキャンセルすると、そのBalance Jobの下で実行中のすべてのタスクがキャンセルされます。
システムテナントにおける進行中のBalance Jobのキャンセル
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aビュー
CDB_OB_BALANCE_JOBSをクエリして、現在実行中のタスクを取得します。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, JOB_ID, BALANCE_STRATEGY, JOB_TYPE, STATUS FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;クエリ結果の例は以下のとおりです:
+-----------+--------+----------------------+------------+--------+ | TENANT_ID | JOB_ID | BALANCE_STRATEGY | JOB_TYPE | STATUS | +-----------+--------+----------------------+------------+--------+ | 1002 | 520683 | LS balance by shrink | LS_BALANCE | DOING | +-----------+--------+----------------------+------------+--------+ 1 row in setクエリ結果に基づき、該当タスクが期待通りでない場合は、以下の操作を実行してそのBalance Jobをキャンセルできます。
ALTER SYSTEM CANCEL BALANCE JOB TENANT = 'tenant_name';例:
obclient(root@sys)[oceanbase]> ALTER SYSTEM CANCEL BALANCE JOB TENANT ='mysql_tenant';
ユーザーテナントにおける進行中のBalance Jobのキャンセル
MySQLテナントまたはOracleテナントのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aビュー
DBA_OB_BALANCE_JOBSをクエリして、現在実行中のタスクを取得します。MySQLモードOracleモードMySQLモードでのクエリステートメントは次のとおりです:
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS;Oracleモードでのクエリステートメントは次のとおりです:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_BALANCE_JOBS;クエリ結果に基づき、期待通りでない場合は、以下の操作を実行してそのBalance Jobをキャンセルできます。
obclient> ALTER SYSTEM CANCEL BALANCE JOB;