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