テーブルをテーブルグループに追加すると、そのテーブルに対してパーティション管理(例:パーティションタイプの変更、パーティション数の変更、パーティション値の変更、パーティションの追加、パーティションの削除など)、テーブルのグループからの移動、他のテーブルグループへの移動などの操作を実行できます。
テーブルのパーティション管理
テーブルパーティション変更時の注意事項
テーブルのパーティションを変更すると、データの分散状況が変化し、リソースの不均衡な割り当てが発生する可能性があります。そのため、テーブルのパーティションを変更する際には、テナントのパーティション均衡を有効にして、リソースの最適かつ均等な割り当てを確保することを推奨します。
データロードバランシングの詳細については、データロードバランシングの概要を参照してください。
注意
- 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;