テーブルをテーブルグループに追加すると、そのテーブルに対してパーティション管理(例:パーティションタイプの変更、パーティション数の変更、パーティション値の変更、パーティションの追加、パーティションの削除など)、テーブルのグループからの移動、他のテーブルグループへの移動などの操作を実行できます。
テーブルのパーティション管理
テーブルパーティション変更時の注意事項
テーブルパーティションを変更すると、データの分布が変化し、リソースの不均衡な割り当てが発生する可能性があります。そのため、テーブルパーティションを変更する際には、テナントのパーティション均衡を有効にして、リソースの最適かつ均等な割り当てを確保することを推奨します。
データロードバランシングの詳細については、データロードバランシングの概要を参照してください。
注意
- OceanBaseデータベースV4.4.0およびそれ以前のバージョンからV4.4.1バージョンにアップグレードする場合:
- スケジュールされたパーティション均衡タスク
SCHEDULED_TRIGGER_PARTITION_BALANCEはデフォルトで無効です(enabled = 0). - テナントレベル構成パラメータ
partition_balance_schedule_intervalの値は変更されません。パーティション均衡タスクは引き続きテナントレベル構成パラメータpartition_balance_scheduler_intervalに依存し、V4.4.1以前のバージョンの動作を維持します。 - ユーザーがスケジュールタスク
SCHEDULED_TRIGGER_PARTITION_BALANCEを有効にすると、partition_balance_schedule_interval = 0が検証されます。そうでない場合、OB_OP_NOT_ALLOWエラーが発生します。
- スケジュールされたパーティション均衡タスク
- OceanBaseデータベースV4.4.1バージョンで新規作成されたテナントの場合:
- スケジュールされたパーティション均衡タスク
SCHEDULED_TRIGGER_PARTITION_BALANCEはデフォルトで有効です(enabled = 1). - テナントレベル構成パラメータ
partition_balance_schedule_intervalのデフォルト値は0です。パーティション均衡のトリガーは、スケジュールタスクとユーザーによる手動トリガーのみに依存します。スケジュールタスクおよびユーザーによる手動トリガーの詳細については、スケジュールされたパーティション均衡タスクの設定および手動でパーティション均衡をトリガーするを参照してください。 - ユーザーが
partition_balance_schedule_intervalを設定すると、SCHEDULED_TRIGGER_PARTITION_BALANCEが無効であることが検証されます。そうでない場合、OB_OP_NOT_ALLOWエラーが発生します。
- スケジュールされたパーティション均衡タスク
テーブルパーティションの変更ルール
テーブルグループ内のテーブルに対してパーティション管理操作を実行する前に、ビューを使用して、現在のテーブルが属するテーブルグループの 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 | SYS | ADAPTIVE | | TBLGROUP1 | TBL2 | SYS | 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 | SYS | ADAPTIVE | +-----------------+------------+---------------+----------+ 1 row in set
テーブルの他のテーブルグループへの移行
テーブルをテーブルグループに追加した後、そのテーブルを他の条件を満たすテーブルグループに移行することができます。
テーブルを他のテーブルグループに移行する際は、移行先のテーブルグループの属性およびそのテーブルグループ内のテーブルのパーティション情報を確認し、現在のテーブルがテーブルグループへの追加条件を満たしているかどうかを確認する必要があります。テーブルグループ情報の詳細な操作については、テーブルグループ情報の表示を参照してください。
テーブルグループの SHARDING 属性に基づいて:
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;