SET_BALANCE_WEIGHTはパーティションの重みを設定します。レベルは上から順に、テーブルレベルとパーティションレベルのパーティション重みを設定できます。
使用制限と注意事項
ユーザーテナントのみが手動でパーティション重みを設定できます。システムテナントでは設定できません。
現在、パーティション重みの設定は、非パーティションテーブルおよびパーティションテーブルのパーティションに対してのみサポートされています。サブパーティションへの重み設定は現在サポートされていません。
既存のエンティティパーティションにのみ重みを設定できます。テーブル作成時に重みを指定することはできません。つまり、まずテーブルを作成し、その後でテーブルのパーティション重みを設定する必要があります。
パーティション重みは整数のみをサポートし、値の範囲は[1, +∞)です。デフォルトでは、パーティションには重みがありません。
パーティション重みを設定する際は、できるだけ少ない段階に分けることを推奨します。最大で3段階に分けることを推奨します:
大重み = 100% × パーティション数
中重み = 50% × パーティション数
小重み = 1
重み均等化に参加させる必要がないパーティションテーブルについては、パーティション重みを設定しないことを推奨します。
パーティション重みを設定する際、下位のパーティションはデフォルトで上位のパーティションの重みを継承します。複数のレベルで同時にパーティション重みが設定されている場合、下位の重みが上位の重みを上書きします。
パーティション重みを設定した後、ユーザーがOffline DDL操作(例:Truncate Table、Truncate Partitionなどの操作)を実行してパーティションエンティティに変更が生じた場合、元のパーティション重みも無効になり、ユーザーは再度パーティション重みを設定する必要があります。パーティション重みが無効になる可能性のあるOffline DDLについては、Online DDLとOffline DDL操作(MySQLモード)を参照してください。
構文
DBMS_BALANCE.SET_BALANCE_WEIGHT(
weight INT,
database_name VARCHAR(65535),
table_name VARCHAR(65535),
partition_name VARCHAR(65535) DEFAULT NULL,
subpartition_name VARCHAR(65535) DEFAULT NULL);
パラメータ説明
パラメータ |
説明 |
|---|---|
| weight | パーティションの重み。パーティション間で使用するCPU、メモリ、ディスクなどのリソースの相対的な割合です。整数のみをサポートし、値の範囲は[1, +∞)です。 |
| database_name | テーブルが属するデータベース名 |
| table_name | テーブル名 |
| partition_name | パーティション名 |
| subpartition_name | サブパーティション名。構文的にはサポートされていますが、現在サブパーティションの重み設定はサポートされていません。 |
例
仮にユーザーが
testデータベースに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テーブル
tbl1_hのテーブルレベルのパーティション重みを1に設定します。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(1,'test','tbl1_h');テーブル
tbl1_hのテーブルレベルのパーティション重みのみを設定した後、設定済みのパーティション重み情報をクエリします。obclient(root@mysql001)[oceanbase]> 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 | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ 1 row in set次に、テーブル
tbl1_h内のパーティションp0のパーティション重みを2に設定します。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(2,'test','tbl1_h','p0');再度、設定済みのパーティション重み情報をクエリします。
obclient(root@mysql001)[oceanbase]> 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