本ドキュメントでは、OBKV-HBaseの自動パーティション分割の仕組みと使用方法を説明します。この機能は、設定したデータ量のしきい値に基づいてパーティションを自動的に分割します。パーティション計画にかかる手間を抑えながら、OceanBaseデータベースの分散処理能力を活用できます。
使用上の制限
現在、自動Range/Range Columnsパーティションがサポートされています。これはRangeパーティションの利点の一つを継承しており、範囲スキャンのシナリオに適しています。また、通常のRangeパーティションにはない、データ量に応じて自動的に分割し、データ量を均等に分散する機能も備えています。
使用方法と例
テーブル識別フラグ
OBKV-HBaseのパーティション分割機能は、kv_attributesパラメータを使用して、指定されたテーブルがOBKV-HBaseテーブルであるかどうかを識別します。そのため、システムがOBKVテーブルタイプを正確に認識できるように、テーブル作成時にkv_attributes設定を追加することを強く推奨します。詳細については、OBKV-HBaseのデータスキーマ:テーブル識別フラグを参照してください。
クイックスタート
自動パーティション機能を使用するには、まず2つのパラメータに注意する必要があります:
パラメータ |
説明 |
|---|---|
enable_auto_split |
テナントの自動パーティション機能を有効にするかどうかを制御します。デフォルト値はFALSEです。 |
auto_split_tablet_size |
テナントで自動パーティション機能が有効な場合、パーティションの自動分割をトリガーするしきい値を指定します。デフォルト値は128MBです。 |
自動パーティションを有効にするコマンドは次のとおりです:
ALTER SYSTEM SET enable_auto_split = true TENANT='tenant';
テーブル作成時または変更時に自動パーティション機能を有効にしたものの、自動パーティションのしきい値を設定しなかった場合、auto_split_tablet_sizeパラメータのデフォルト値である128MBがそのテーブルの自動パーティションのしきい値となります。パーティションのディスク使用量がこの設定値を超えると、パーティション分割がトリガーされます。自動パーティションのしきい値を手動で設定する場合、サンプルコマンドは次のとおりです:
-- 自動パーティションのしきい値を256MBに設定
AlTER SYSTEM SET auto_split_tablet_size = '256MB';
応用例
構成パラメータのみを設定することで、OBKV-HBaseの自動パーティション分割機能を迅速に有効にできますが、これによりテナント内のすべての業務にこの機能が適用されます。一部の業務テーブルの自動パーティション分割機能をより細かく管理したい場合は、以下のユースケース例を参考にしてください:
- OBKV-HBaseを利用する新しい業務。
このユースケースでは、当該業務の新規テーブルに対して自動パーティションを有効にします。例:
-- 自動パーティションの非パーティションテーブルを作成する(デフォルト設定の128MBを分割しきい値として使用)
CREATE TABLE auto_pt2 (c1 int, c2 int, primary key(c1));
PARTITION BY RANGE ();
-- 自動パーティションの非パーティションテーブルを作成する(分割しきい値を1024MBに設定、ユーザー設定を使用)
CREATE TABLE auto_pt3 (c1 int, c2 int, primary key(c1))
PARTITION BY RANGE () SIZE('1024MB');
- 古いバージョンのOBKV-HBaseクラスタを、自動パーティションをサポートする新しいバージョンにアップグレードしたい場合。
このようなシナリオでは、既存のテーブルに自動パーティション機能を有効にする必要があります。これは、自動パーティションの属性を変更することで実現できます。例:
-- 古いバージョンから新しいバージョンにアップグレードしたい業務テーブルt1は、古いバージョンでテーブル作成時に自動パーティションが有効になっていません。
CREATE TABLE t1 (C1 INT, C2 INT, PRIMARY KEY(C1))
PARTITION BY RANGE(C1) SIZE('10GB')
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200),
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
-- 新しいバージョンで、自動パーティション化されていないテーブルt1のパーティション属性を変更し、自動パーティションを有効にする
ALTER TABLE t1 PARTITION BY RANGE() SIZE('128MB');
- 手動パーティション化を推奨される業務。
現在の自動パーティション分割機能はデータ量の均等化のみをサポートしているため、一部のパーティションのデータ量が少ない一方で、他のパーティションの負荷が高くなる場合があります。そのような状況では、手動でパーティションを分割し、分割のしきい値を設定することで、高負荷のパーティションのデータを異なるパーティションに均等に分散させることができます。例:
-- t1というテーブルがあり、自動パーティションが有効になっていないと仮定します。
CREATE TABLE pt1 (c1 int, c2 int, c3 int, primary key(c1))
PARTITION BY RANGE(c1)
(PARTITION p0 VALUES LESS THAN(50),
PARTITION p1 VALUES LESS THAN(100),
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
-- 0-50のパーティションの負荷が高いことが判明した場合、さらに複数のパーティションに分割できます。
ALTER TABLE t1 REORGANIZE PARTITION p0 INTO (
PARTITION p0_1 VALUES LESS THAN (30),
PARTITION p0_2 VALUES LESS THAN (50)
);