ビジネスニーズに応じて、テーブルのパーティション重みを設定できます。レベルは上から下に、テーブルレベルとパーティションレベルがサポートされています。
制限事項と注意点
パーティションの重みを手動で設定できるのはユーザーテナントのみです。システムテナントでは設定できません。
現在、パーティションの重みは、非パーティションテーブルおよびパーティションテーブルのパーティションに対してのみ設定できます。サブパーティションへの重み設定は現在サポートされていません。
既存のエンティティパーティションに対してのみ重みを設定できます。テーブル作成時に重みを指定することはできません。つまり、まずテーブルを作成し、その後でテーブルのパーティションに対して重みを設定する必要があります。
パーティションの重みは整数のみをサポートし、値の範囲は[1, +∞)です。デフォルトでは、パーティションには重みがありません。
パーティションの重みを設定する際は、可能な限り少ない段階に分けることを推奨します。最大で3段階に分けることを推奨します:
大重み = 100% × パーティション数
中重み = 50% × パーティション数
小重み = 1
重みの均等化に参加させる必要がないパーティションテーブルについては、パーティションの重みを設定しないことを推奨します。
パーティションの重みを設定する際、下位パーティションは上位パーティションの重みをデフォルトで継承します。複数のレベルに同時にパーティションの重みを設定した場合、下位の重みが上位の重みを上書きします。
パーティションの重みを設定した後、ユーザーがOffline DDL操作(例:Truncate Table、Truncate Partitionなどの操作)を実行してパーティションのエンティティに変更が生じた場合、元のパーティションの重み設定も無効になり、ユーザーは再度パーティションの重みを設定する必要があります。パーティションの重みを無効にする可能性のあるOffline DDLについては、Online DDLとOffline DDL操作(MySQLモード)およびOnline DDLとOffline DDL操作(Oracleモード)を参照してください。
MySQLモードでのパーティション重みの設定
ユーザーがクラスタのMySQLテナントにログインします。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql001#obdemo -p***** -A(オプション)パーティション重みを設定するテーブルを作成します。
例えば、Hashパーティションテーブル
tbl1_hを作成します。obclient(root@mysql001)[test]> CREATE TABLE tbl1_h(col1 INT,col2 VARCHAR(50)) PARTITION BY HASH(col1) PARTITIONS 5;(オプション)テーブルのパーティション情報を取得します。
obclient(root@mysql001)[test]> SELECT TABLE_NAME, PARTITION_NAME FROM information_schema.PARTITIONS WHERE TABLE_NAME ='tbl1_h';クエリ結果は次のとおりです:
+------------+----------------+ | TABLE_NAME | PARTITION_NAME | +------------+----------------+ | tbl1_h | p0 | | tbl1_h | p3 | | tbl1_h | p2 | | tbl1_h | p4 | | tbl1_h | p1 | +------------+----------------+ 5 rows in set業務要件に応じて、適切なレベルを選択し、パーティション重みを設定します。
パーティション重みは整数のみサポートされ、値の範囲は [1, +∞) です。デフォルトでは、パーティションには重みがありません。
テーブルレベルの重みを設定する
パーティションテーブルまたは非パーティションテーブルのテーブルレベルのパーティション重みを設定できます。例えば、パーティションテーブル
tbl1_hのパーティション重みを1に設定するステートメントは以下のとおりです。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(1,'test','tbl1_h');パーティションレベルの重みを設定する
テーブル
tbl1_h内のパーティションp0のパーティション重みを2に設定するステートメントは以下のとおりです。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(2,'test','tbl1_h','p0');
完了後、テーブルのパーティション重み情報を確認します。
obclient(root@mysql001)[test]> SELECT * FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT;クエリ結果は次のとおりです:
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | 500002 | NULL | NULL | 1 | test | tbl1_h | NULL | NULL | NULL | 500001 | NULL | 500002 | | 500002 | 500003 | NULL | 2 | test | tbl1_h | p0 | NULL | NULL | 500001 | NULL | 500003 | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ 2 rows in set
Oracleモードでのパーティション重みの設定
- ユーザーがクラスタのOracleテナントにログインします。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に合わせてください。
obclient -h10.xx.xx.xx -P2883 -usys@oracle001#obdemo -p***** -A
- (オプション)パーティションの重みを設定するテーブルを作成します。
例えば、Hashパーティションテーブル TBL1_H を作成します。
obclient(SYS@oracle001)[SYS]> CREATE TABLE TBL1_H(col1 INT,col2 VARCHAR(50)) PARTITION BY HASH(col1) PARTITIONS 5;
- (オプション)テーブルのパーティション情報を取得します。
obclient(SYS@oracle001)[SYS]> SELECT TABLE_NAME, PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'TBL1_H';
クエリ結果は次のとおりです:
+------------+----------------+
| TABLE_NAME | PARTITION_NAME |
+------------+----------------+
| TBL1_H | P4 |
| TBL1_H | P3 |
| TBL1_H | P2 |
| TBL1_H | P1 |
| TBL1_H | P0 |
+------------+----------------+
5 rows in set
- ビジネスニーズに応じて、適切なレベルを選択し、パーティションの重みを設定します。
パーティションの重みは整数のみサポートしており、値の範囲は [1, +∞) です。デフォルトでは、パーティションには重みがありません。
テーブルレベルの重みを設定する
パーティションテーブルまたは非パーティションテーブルのテーブルレベルのパーティション重みを設定できます。例えば、パーティションテーブル
TBL1_Hのパーティション重みを1に設定するステートメントは以下のとおりです。obclient(SYS@oracle001)[SYS]> delimiter //obclient(SYS@oracle001)[SYS]> BEGIN DBMS_BALANCE.SET_BALANCE_WEIGHT(1,'SYS','TBL1_H'); END;//obclient(SYS@oracle001)[SYS]> delimiter ;パーティションレベルの重みを設定する
テーブル
TBL1_HのパーティションP0のパーティション重みを2に設定するステートメントは以下のとおりです。obclient(SYS@oracle001)[SYS]> delimiter //obclient(SYS@oracle001)[SYS]> BEGIN DBMS_BALANCE.SET_BALANCE_WEIGHT(2,'SYS','TBL1_H','P0'); END;//obclient(SYS@oracle001)[SYS]> delimiter ;
- 完了後、テーブルのパーティション重み情報を確認します。
obclient(SYS@oracle001)[SYS]> SELECT * FROM SYS.DBA_OB_OBJECT_BALANCE_WEIGHT;
クエリ結果は次のとおりです:
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
| TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID |
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
| 500002 | NULL | NULL | 1 | SYS | TBL1_H | NULL | NULL | NULL | 201006 | NULL | 500002 |
| 500002 | 500003 | NULL | 2 | SYS | TBL1_H | P0 | NULL | NULL | 201006 | NULL | 500003 |
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
2 rows in set
次のステップ
パーティションの重みを設定した後、望ましいパーティションの重みの均等化が必要な場合は、DBMS_BALANCE.TRIGGER_PARTITION_BALANCEサブプログラムを呼び出して、手動で一度パーティションの均等化をトリガーできます。手動でのパーティション均等化の詳細な操作については、パーティション均等化の手動トリガーを参照してください。
または、定期的なパーティション均等化タスクのトリガーを待つこともできます。定期的なパーティション均等化タスクの関連情報については、定期的なパーティション均等化タスクの設定を参照してください。
関連ドキュメント
パーティションの重みの適用例については、テナント内の均等化の パーティションの重み均等化の適用 を参照してください。