テーブルをテーブルグループに追加した後、パーティションの管理(例えば、パーティションタイプの変更、パーティション数の変更、パーティション値の変更、パーティションの追加、パーティションの削除など)、テーブルのグループからの移動、他のテーブルグループへの移行などの操作が可能になります。
テーブルのパーティション管理
テーブルパーティション変更時の注意点
テーブルパーティションを変更する際、テナントのパーティション自動再バランシング機能を使用する必要がある場合は、テナント内のロードバランシングを有効にし、パーティションロードバランシングタスクの生成時間間隔を設定する必要があります。テナントのパーティション自動再バランシングは、以下の2つの構成パラメータで制御されます:
テナントレベルの構成パラメータ
enable_rebalanceこの構成パラメータは、システムテナントではテナント間のロードバランシングを行うかどうかを制御し、ユーザーテナントではテナント内の再バランシングを行うかどうかを制御します。デフォルト値は
trueで、構成パラメータの変更は即時に反映されます。システムテナントの
enable_rebalanceの値:true:テナント間のロードバランシングを有効にすることを示します。false:テナント間のロードバランシングを無効にすることを示します。
ユーザーテナントの
enable_rebalanceの値:true:テナント内のロードバランシングを有効にすることを示します。テーブルパーティションを変更する前に、テナント内のロードバランシングを有効にすることを推奨します。false:テナント内のロードバランシングを無効にすることを示します。
テナントレベルの構成パラメータ
PARTITION_BALANCE_SCHEDULE_INTERVALこの構成パラメータは、パーティションロードバランシングタスクを生成する時間間隔を制御します。
enable_rebalanceの値がtrueの場合、システムはpartition_balance_schedule_intervalを時間間隔としてパーティションロードバランシングタスクを自動的にトリガーします。デフォルト値は2hで、値の範囲は [0s, +∞) です。0sはパーティション再バランシングを無効にすることを示し、構成パラメータの変更は即時に反映されます。
2つの構成パラメータの設定方法は以下のとおりです:
管理者ユーザーでクラスタの
sysテナントまたはユーザーテナントにログインします。テナント内のロードバランシングを有効にします。
システムテナントで指定したテナントのテナント内ロードバランシングを有効にする
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';このステートメントは、ユーザーテナントの構成パラメータ
enable_rebalanceの値をtrueに設定します。例:
ALTER SYSTEM SET enable_rebalance = true TENANT = 'oracle';システムテナントですべてのユーザーテナントのテナント内ロードバランシングを有効にする
ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;または
ALTER SYSTEM SET enable_rebalance = true TENANT = all;このステートメントは、ユーザーテナントの構成パラメータ
enable_rebalanceの値がすべてtrueであることを示します。説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allは同じ意味であり、適用範囲がすべてのユーザーテナントになる場合は、TENANT = all_userを使用することを推奨します。今後、TENANT = allは廃止され、使用されなくなります。ユーザーテナントで自身のテナントのテナント内ロードバランシングを有効にする
MySQLテナントで自身のテナントのテナント内ロードバランシングを有効にするステートメントは以下のとおりです:
ALTER SYSTEM SET enable_rebalance = true;
パーティションロードバランシングタスクを生成する時間間隔を設定します。
システムテナント
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'tenant_name';例:
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'mysql';ユーザーテナント
ALTER SYSTEM SET partition_balance_schedule_interval='2h';
テーブルパーティションの変更ルール
テーブルグループ内のテーブルに対してパーティション管理操作を行う前に、ビューを通じて現在のテーブルが属するテーブルグループのSHARDINGプロパティ、テーブルグループ内に存在するテーブル、およびテーブルグループ内のテーブルのパーティション情報を確認できます。詳細な操作については、テーブルグループ情報の表示を参照してください。
次に、クエリ結果に基づいて、テーブルグループ内に現在のテーブルのみがある場合は、制限なくパーティション管理操作を正常に実行できます。テーブルグループ内に現在のテーブル以外に他のテーブルがある場合は、以下の変更ルールに従う必要があります:
テーブルが属するテーブルグループの
SHARDINGプロパティがNONEの場合:テーブルがパーティションテーブルでない場合、パーティションテーブル以外のテーブルをパーティションテーブルまたはコンポジット・パーティションテーブルに変更することが許可されます。
テーブルがパーティションテーブルの場合、パーティションテーブルをコンポジット・パーティションテーブルに変更したり、コンポジット・パーティションテーブルをパーティションテーブルに変更したりすることが許可されます。また、パーティションの追加や削除も可能であり、パーティションタイプ、パーティション数、パーティション値の変更に制限はありません。
テーブルが属するテーブルグループの
SHARDINGプロパティがPARTITIONの場合:テーブルがパーティションテーブルでない場合、パーティションテーブル以外のテーブルをパーティションテーブルに変更することは許可されません。
テーブルがパーティションテーブルの場合、パーティションテーブル以外のテーブルに変更することは許可されません。
テーブルがパーティションテーブルの場合、コンポジット・パーティションテーブルに変更することが許可されます。また、コンポジット・パーティションテーブル内のパーティションテーブルに対応するパーティションタイプ、パーティション数、パーティション値は、テーブルグループ内の他のテーブルと一致させる必要があります。コンポジット・パーティションテーブルのパーティションタイプ、パーティション数、パーティション値の定義に制限はありません。パーティション数を変更するには、パーティションテーブルの追加や削除操作を使用します。他の方法でパーティションテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
テーブルがコンポジット・パーティションテーブルの場合、パーティションテーブルに変更することが許可されます。また、パーティションテーブルに対応するパーティションタイプ、パーティション数、パーティション値は、テーブルグループ内の他のテーブルの値と一致させる必要があります。パーティション数を変更するには、パーティションテーブルの追加や削除操作を使用します。他の方法でパーティションテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
パーティションテーブルの追加または削除を実行したテーブルグループでは、システムはロードバランシングを行いません。テーブルグループ内のすべてのテーブルのパーティションタイプ、パーティション数、パーティション値などが
PARTITIONのプロパティ要件を満たしている場合にのみ、ロードバランシングが実行されます。
テーブルが属するテーブルグループの
SHARDINGプロパティがADAPTIVEの場合:テーブルがパーティションテーブルでない場合、パーティションテーブル以外のテーブルをパーティションテーブルに変更することは許可されません。
テーブルがパーティションテーブルの場合、パーティションテーブル以外のテーブルに変更することは許可されません。
テーブルが属するテーブルグループ内にパーティションテーブルのみがある場合、このテーブルをパーティションテーブル以外のテーブルまたはコンポジット・パーティションテーブルに変更することは許可されません。また、パーティションテーブルの追加や削除操作によってのみパーティション数を変更できます。他の方法でテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
テーブルが属するテーブルグループ内にコンポジット・パーティションテーブルのみがある場合、このテーブルをパーティションテーブルに変更することは許可されません。また、パーティションテーブルの追加や削除、コンポジット・パーティションテーブルの追加や削除操作によってのみパーティション数を変更できます。他の方法でテーブルのパーティションタイプ、パーティション数、パーティション値をテーブルグループ内の他のテーブルと異なる値に変更することは許可されません。
パーティションテーブルの追加または削除、コンポジット・パーティションテーブルの追加または削除を実行したテーブルグループでは、システムはロードバランシングを行いません。テーブルグループ内のすべてのテーブルのパーティションタイプ、パーティション数、パーティション値などが
ADAPTIVEのプロパティ要件を満たしている場合にのみ、ロードバランシングが実行されます。
テーブルのパーティションの変更
現在のテーブルの実際の状況と変更ルールを組み合わせて、以下の内容を参考にして、テーブルのパーティションを変更します。
テーブルをテーブルグループから外す
テーブルをテーブルグループに追加した後、そのテーブルをグループから外すことができます。SQL文は以下のとおりです。
ALTER TABLE table_name SET TABLEGROUP '';
以下の簡単な例で説明します。
テーブルグループ
tblgroup1があり、そのグループにはtbl1とtbl2の2つのテーブルが含まれているとします。SHOW TABLEGROUPS WHERE tablegroup_name = 'tblgroup1';クエリ結果:
+-----------------+------------+---------------+----------+ | Tablegroup_name | Table_name | Database_name | Sharding | +-----------------+------------+---------------+----------+ | tblgroup1 | tbl1 | test | ADAPTIVE | | tblgroup1 | tbl2 | test | ADAPTIVE | +-----------------+------------+---------------+----------+ 2 rows in setテーブル
tbl1をテーブルグループから外します。ALTER TABLE tbl1 SET TABLEGROUP '';再びテーブルグループ内のテーブルを確認します。
SHOW TABLEGROUPS WHERE tablegroup_name = 'tblgroup1';クエリ結果:
+-----------------+------------+---------------+----------+ | Tablegroup_name | Table_name | Database_name | Sharding | +-----------------+------------+---------------+----------+ | tblgroup1 | tbl2 | test | ADAPTIVE | +-----------------+------------+---------------+----------+ 1 rows in set
テーブルを他のテーブルグループに移行する
テーブルをテーブルグループに追加した後、そのテーブルを他の条件を満たすテーブルグループに移行できます。
テーブルを他のテーブルグループに移行する際は、移行先のテーブルグループのプロパティおよびグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作方法については、テーブルグループ情報の表示を参照してください。
SHARDINGプロパティがNONEのテーブルグループの場合、移行元のテーブルに制限はなく、直接このテーブルグループに移行できます。SHARDINGプロパティがPARTITIONのテーブルグループの場合、移行元のテーブルの対応するパーティションは、テーブルグループ内のすべてのテーブルのパーティション定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループ内には、パーティションテーブルとコンポジット・パーティションテーブルの両方を同時に配置できます。同じパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること。例えば、どちらもRangeパーティションである場合。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数とパーティション数が同じであり、Range分割ポイントも同じであること。
SHARDINGプロパティがADAPTIVEのテーブルグループの場合、移行元のテーブルの対応するパーティションとコンポジット・パーティションは、テーブルグループ内のすべてのテーブルのパーティションとコンポジット・パーティションの定義と一致している必要があります。これには、パーティションタイプ、パーティション数、パーティション値が含まれます。テーブルグループ内のテーブルは、すべてパーティションテーブルまたはすべてコンポジット・パーティションテーブルである必要があります。同じパーティション定義とは具体的には以下を指します:
- パーティションタイプが同じであること(例えば、どちらもHash + Rangeパーティションである場合)。
- Hashパーティションの場合、参照する列数とパーティション数が同じであること。
- Rangeパーティションの場合、参照する列数とパーティション数が同じであり、Range分割ポイントも同じであること。
- コンポジット・パーティションの場合、そのパーティションタイプに基づき、パーティションに関する要件が同じであること。
テーブルを他のテーブルグループに移行するSQLステートメントは以下のとおりです。
ALTER TABLE table_name SET TABLEGROUP tablegroup_name;
テーブル tbl1 をテーブルグループ tblgroup2 に移行する例は以下のとおりです:
ALTER TABLE tbl1 SET TABLEGROUP tblgroup2;