ビジネスニーズに応じて、テーブルのパーティションに重みを設定できます。レベルは上から下へ、テーブルレベルとパーティションレベルの重み設定が可能です。
使用上の制限と注意事項
パーティションの重みを手動で設定できるのはユーザーテナントのみです。システムテナントでは設定できません。
現在、パーティションの重み設定は、非パーティションテーブルおよびパーティションテーブルのパーティションに対してのみサポートされています。サブパーティションへの重み設定は現在対応していません。
既存のエンティティパーティションにのみ重みを設定できます。テーブル作成時に重みを指定することはできません。つまり、まずテーブルを作成し、その後でテーブルのパーティションに重みを設定する必要があります。
パーティションの重みは整数のみをサポートし、値の範囲は[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 サブプログラムを呼び出して、手動でパーティションの均等化をトリガーできます。手動でのパーティションの均等化の詳細な操作については、パーティションの均等化を手動でトリガーするを参照してください。
または、定期的なパーティションの均等化タスクのトリガーを待つこともできます。定期的なパーティションの均等化タスクの関連情報については、定期的なパーティションの均等化タスクの設定を参照してください。
関連ドキュメント
パーティションの重みの適用例については、テナント内の均等化の パーティションの重みによる均等化の適用 を参照してください。