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