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