ハイブリッドパーティションテーブルを作成して、異なるストレージエンジンに格納されているデータにアクセスできます。
次の図は、ハイブリッドパーティションの仕組みを示しています。
ハイブリッドパーティションは、テーブルのパーティションを異なるストレージメディアに格納することで、ホットデータとコールドデータを分離します。これにより、ホットデータに対するクエリパフォーマンスや DML 操作に影響を与えることなく、コールドデータのストレージコストを削減します。
パーティションテーブルを ハイブリッドパーティションテーブル としてアーカイブするには、次の条件を満たす必要があります。
-
MySQL 8.0.2 であり、マイナーバージョンが 8.0.2.2.34.1 以降である場合は、
loose_allow_create_hybrid_partitionパラメーターをONに設定する必要があります。 -
MySQL 8.0.2 であり、マイナーバージョンが 8.0.2.2.34.1 より前である場合は、新しいマイナーバージョンにアップグレードしてください。
前提条件
クラスターで PolarDB for MySQL 8.0.2 を実行しており、リビジョンバージョンが 8.0.2.2.34.1 以降である必要があります。 「バージョン番号の表示」でクラスターのバージョンを確認できます。
作成するパーティションのデータファイルが OSS に既に存在し、その名前が次のルールに従っている必要があります:
ファイル拡張子とパーティションマーカーは、大文字である必要があります。
テーブル名とパーティション名は、データベース内の名前と一致する必要があります。
例えば、テーブル
t1のp1パーティションが CSV エンジンを使用する場合、そのパーティションのデータファイル名はt1#P#p1.CSVになります。コールドデータアーカイブによってアーカイブされたパーティションテーブルは、ハイブリッドパーティションテーブルとしてアーカイブできます。
制限事項
ハイブリッドパーティションテーブルには、InnoDB ストレージエンジンを使用するパーティションが少なくとも 1 つ含まれている必要があります。 テーブルレベルのエンジンは InnoDB である必要があります。
サブパーティションを持つハイブリッドパーティションテーブルを作成する場合、第 1 レベルのパーティションのエンジンはテーブルのエンジンと一致する必要があり、少なくとも 1 つのサブパーティションが InnoDB ストレージエンジンを使用する必要があります。
ハイブリッドパーティションテーブルは、
RANGEおよびLISTパーティションタイプにのみ対応しています。ハイブリッドパーティションテーブルの OSS パーティションでは、DML 操作 (
INSERT、UPDATE、DELETE、またはLOADを含む) はサポートされていません。
パラメーター
ハイブリッドパーティションテーブルを使用する場合、ビジネス要件に応じて、PolarDB クラスターの パラメーター ページで、以下のパラメーターを 設定 できます。
パラメーター | レベル | 説明 |
| Global | Specifies the rule for querying hybrid partitioned tables. Valid values:
|
| グローバル | 自動コールドデータアーカイブ (DLM) 機能のスイッチです。 有効な値:
説明
|
| グローバル | InnoDB 以外のエンジンパーティションを含むパーティションテーブルの作成またはアーカイブを許可するかどうかを制御します。 有効な値:
説明
|
| グローバル / セッション | OSS テーブルに対して OSS メタデータ (メタ) 管理を有効にするかどうかを制御します。
|
| グローバル / セッション | OSS テーブルをクエリするときにファイルレベルのフィルタリング (ファイルフィルター) を有効にするかどうかを制御します。 この機能は、min/max 統計とブルームフィルターを使用して、無関係なデータファイルをスキップし、スキャンされる OSS データ量を削減します。 この機能では、
|
| グローバル / セッション | データライフサイクル管理 (DLM) 機能による、アーカイブされた OSS パーティションの自動プルーニングのスイッチです。 DML 操作 (UPDATE/DELETE) が実行されると、システムは OSS (ORC/CSV) にアーカイブ中のパーティションと、すでに OSS にアーカイブされているパーティションを自動的にプルーニングします。 これにより、DML 操作がアーカイブによってブロックされるのを防ぎ、DML と DDL の間の競合を解決します。 有効な値:
|
| グローバル / セッション | OSS パーティションに対する自動クエリプルーニングを制御します。 このパラメーターは、ON に設定するとプルーニングを 無効 にし、OFF に設定するとプルーニングを 有効 にするという逆のロジックで動作するため、注意が必要です。 有効な値:
|
ハイブリッドパーティションの作成
ハイブリッドパーティションテーブルを作成するには、OSS サーバーが必要です。 サーバーがない場合は、次の構文を使用して作成します:
CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');クラスターのバージョンが PolarDB for MySQL 8.0.2 で、リビジョンバージョンが 8.0.2.2.6 以降の場合、my_oss_sts_token パラメーターがサポートされています。
次の表にパラメーターを示します:
パラメーター | タイプ | 説明 |
oss_server_name | string | OSS サーバーの名前。 説明 このパラメーターはグローバルであり、一意である必要があります。 名前は最大 64 文字で、大文字と小文字は区別されません。 64 文字を超えた部分は切り捨てられます。 OSS サーバー名は引用符で囲んだ文字列として指定できます。 |
my_oss_endpoint | string | OSS リージョンのエンドポイント。 説明 Alibaba Cloud ホストからデータベースにアクセスする場合は、インターネットトラフィックが発生しないように、内部エンドポイントを使用します。 内部エンドポイントには通常、「internal」という文字列が含まれます。 |
my_oss_bucket | string | データファイルを含む OSS バケット。 このバケットは OSS に既に存在している必要があります。 |
my_oss_access_key_id | string | OSS へのアクセスに使用する AccessKey ID。 |
my_oss_access_key_secret | string | OSS へのアクセスに使用する AccessKey Secret。 |
my_oss_prefix | string | OSS 内のデータファイルのパスプレフィックス。 この値は空にしたり、特殊文字を含めたりすることはできません。 |
my_oss_sts_token | string | OSS の一時的なアクセス認証情報。 OSS の一時的なアクセス認証情報の取得方法の詳細については、「一時的なアクセス認証情報の取得」をご参照ください。 説明
|
次の例は、ハイブリッドパーティションテーブルの作成方法を示します。
CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
PARTITION p1 values less than (1000) ENGINE = CSV,
PARTITION p2 values less than (2000) ENGINE = CSV,
PARTITION p3 values less than (3000) ENGINE = INNODB
);ハイブリッドパーティションのクエリ
異なるストレージエンジン上のパーティションは、3 つの方法でクエリできます:
hybrid_partition_query_mix_engine_enabledパラメーターを ON に設定します。 クエリは、InnoDB、X-Engine、および OSS 上のパーティションからデータを返します。 例:-- t1 はハイブリッドパーティションテーブルです。 SELECT * FROM t1;hybrid_partition_query_mix_engine_enabledパラメーターを OFF に設定します。 クエリは、InnoDB および X-Engine パーティションからのみデータを返します。 例:-- t1 はハイブリッドパーティションテーブルです。 SELECT * FROM t1;名前で特定のパーティションをクエリします。 これにより、ストレージエンジンに関係なく、指定されたパーティションからデータが取得されます。 例:
-- t1 はハイブリッドパーティションテーブルで、p1 はクエリするパーティションの名前です。 SELECT * FROM t1 partition (p1);