すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ハイブリッドパーティションの作成

最終更新日:Aug 01, 2026

ハイブリッドパーティションテーブルを作成して、異なるストレージエンジンに格納されているデータにアクセスできます。

次の図は、ハイブリッドパーティションの仕組みを示しています。

image

ハイブリッドパーティションは、テーブルのパーティションを異なるストレージメディアに格納することで、ホットデータとコールドデータを分離します。これにより、ホットデータに対するクエリパフォーマンスや 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 クラスターの パラメーター ページで、以下のパラメーターを 設定 できます。

パラメーター

レベル

説明

loose_hybrid_partition_query_mix_engine_enabled

Global

Specifies the rule for querying hybrid partitioned tables. Valid values:

  • OFF (default): When you query a hybrid partitioned table, the query covers partitions in both the InnoDB engine and the X-Engine engine.

  • ON: When you query a hybrid partitioned table, the query covers partitions in the InnoDB engine, the X-Engine engine, and OSS.

loose_polar_dlm_storage_mode

グローバル

自動コールドデータアーカイブ (DLM) 機能のスイッチです。 有効な値:

  • OFF (デフォルト):DLM ストレージは無効になります。 スケジューラは起動せず、アーカイブ操作は実行されません。

  • RO (非推奨):DLM ストレージは読み取り専用です。 アーカイブされたコールドデータパーティションはクエリできますが、新しいアーカイブ書き込み操作は実行されません。 この値が本番環境で使用されることはほとんどありません。

  • RW (推奨):DLM ストレージは読み取り/書き込み可能です。 スケジューラが起動し、DLM ポリシーに基づく自動アーカイブをサポートします。また、アーカイブされたデータもクエリできます。

説明
  • このパラメーターは、リビジョンバージョンが 8.0.2.2.34.1 以降の PolarDB for MySQL 8.0.2 クラスターにのみ適用されます。

  • コールドデータアーカイブを有効にすると、システムはこのパラメーターを自動的に RW に設定します。 手動での変更は不要です。

  • X-Engine 高圧縮エンジンのみを使用してパーティションテーブルをアーカイブする場合 (OSS コールドデータアーカイブなし)、DLM スケジューリングを有効にするには、このパラメーターを手動で RW に設定する必要があります。

loose_allow_create_hybrid_partition

グローバル

InnoDB 以外のエンジンパーティションを含むパーティションテーブルの作成またはアーカイブを許可するかどうかを制御します。 有効な値:

  • OFF (デフォルト):InnoDB 以外のエンジンパーティションを含むパーティションテーブルの作成は禁止されます。 すべてのパーティションは InnoDB エンジンを使用する必要があります。

  • ON (推奨):InnoDB 以外のエンジンパーティションを含むパーティションテーブルの作成が許可されます。 パーティションレベルで OSS (CSV/ORC) または X-Engine エンジンを指定できます。

説明
  • このパラメーターは、リビジョンバージョンが 8.0.2.2.34.1 以降の PolarDB for MySQL 8.0.2 クラスターにのみ適用されます。

  • コールドデータアーカイブを有効にすると、バージョンによっては、システムがこのパラメーターを自動的に ON に設定する場合があります。

loose_use_oss_meta

グローバル / セッション

OSS テーブルに対して OSS メタデータ (メタ) 管理を有効にするかどうかを制御します。 loose_csv_oss_file_filter パラメーターはこのパラメーターに依存します。 有効な値:

  • ON:OSS メタデータ管理が有効になります。 OSS テーブルが作成またはアーカイブされるときにメタ情報が書き込まれます。 その後、メタデータを読み取ることでファイルリストが取得され、loose_csv_oss_file_filter フィルタリング機能がサポートされます。

  • OFF:OSS メタデータ管理は無効になります。 メタ情報は書き込まれません。 メタデータは OSS ファイルを直接一覧表示することで取得され、loose_csv_oss_file_filter はサポートされません。

loose_csv_oss_file_filter

グローバル / セッション

OSS テーブルをクエリするときにファイルレベルのフィルタリング (ファイルフィルター) を有効にするかどうかを制御します。 この機能は、min/max 統計とブルームフィルターを使用して、無関係なデータファイルをスキップし、スキャンされる OSS データ量を削減します。 この機能では、loose_use_oss_meta パラメーターを有効にする必要があります。 有効な値:

  • OFF:ファイルフィルタリングは無効になります。 クエリ中に OSS テーブル内のすべてのデータファイルがスキャンされます。

  • ON (推奨):ファイルフィルタリングが有効になります。 クエリ中に loose_csv_oss_file_filter が WHERE 条件とともに使用され、クエリパフォーマンスが向上します。

dlm_prune_archiving_oss_partitions

グローバル / セッション

データライフサイクル管理 (DLM) 機能による、アーカイブされた OSS パーティションの自動プルーニングのスイッチです。 DML 操作 (UPDATE/DELETE) が実行されると、システムは OSS (ORC/CSV) にアーカイブ中のパーティションと、すでに OSS にアーカイブされているパーティションを自動的にプルーニングします。 これにより、DML 操作がアーカイブによってブロックされるのを防ぎ、DML と DDL の間の競合を解決します。 有効な値:

  • ON (デフォルト、推奨):DML 操作 (UPDATE/DELETE) 実行時に、OSS へアーカイブ中のパーティション、およびすでに OSS へアーカイブ済みのパーティションを自動的にプルーニングします。

  • OFF:DML 操作は、OSS にアーカイブ中のパーティションを自動的にプルーニングしません。

hybrid_partition_query_mix_engine_enabled

グローバル / セッション

OSS パーティションに対する自動クエリプルーニングを制御します。 このパラメーターは、ON に設定するとプルーニングを 無効 にし、OFF に設定するとプルーニングを 有効 にするという逆のロジックで動作するため、注意が必要です。 有効な値:

  • OFF (デフォルト、推奨):クエリ実行時に、システムは自動的に OSS パーティションをプルーニング (除外) します。 これにより、コールドデータへの不要なアクセスが回避されます。

  • ON (非推奨):クエリ実行時に、システムは OSS パーティションをプルーニングしません。 すべてのパーティション (InnoDB、X-Engine、OSS) がクエリ対象となります。

ハイブリッドパーティションの作成

ハイブリッドパーティションテーブルを作成するには、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 の一時的なアクセス認証情報の取得方法の詳細については、「一時的なアクセス認証情報の取得」をご参照ください。

説明

my_oss_sts_token パラメーター値には、デフォルトの有効期限があります。my_oss_sts_token の有効期限が切れた場合は、次のコマンドを使用して EXTRA_SERVER_INFO 内のすべてのパラメーター値をリセットする必要があります。

ALTER SERVER server_name 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>"}');

次の例は、ハイブリッドパーティションテーブルの作成方法を示します。

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);