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

PolarDB:X-Engine の使用に関する注意事項

最終更新日:Dec 20, 2025

本トピックでは、X-Engine の使用方法について説明します。

InnoDB から X-Engine へのテーブルのストレージエンジンの変更

次のコマンドを実行して、テーブルのストレージエンジンを InnoDB エンジンから X-Engine に変更できます。

ALTER TABLE <database_name>.<table_name> ENGINE xengine;
説明

ALTER コマンドを使用してテーブルのストレージエンジンを InnoDB から X-Engine に変更すると、そのテーブルへのデータ操作言語 (DML) およびデータ定義言語 (DDL) の書き込み操作がブロックされます。

X-Engine でのテーブルの作成

InnoDB と X-Engine の両方のストレージエンジンを使用するクラスターで X-Engine を使用するテーブルを作成するには、テーブル作成時に X-Engine を指定する必要があります。構文は次のとおりです:

CREATE TABLE t1(c1 int primary key , c2 int) ENGINE=xengine;

メモリリソース比率の調整

クラスターの [設定と管理] > [Time to Live] ページの [X-Engine (ウォームデータ)] タブで、要件に合わせていつでもメモリリソースの比率を調整できます。image

次の表に、3 つの典型的なシナリオにおける推奨比率を示します。ビジネス要件に基づいて比率を設定できます。

シナリオ

InnoDB (%)

X-Engine (%)

ホットデータには InnoDB を使用し、コールドデータには X-Engine を使用します。コールドデータは、ほとんどアクセスされないデータとして分類されます。

80

20

ホットデータには InnoDB を使用し、コールドデータには X-Engine を使用します。コールドデータは引き続き更新され、クエリも可能です。

50

50

少量のデータには InnoDB を使用し、更新やクエリが必要な大量のデータには X-Engine を使用します。

20

80

制限事項

X-Engine には、その機能と大規模トランザクションに関する制限があります。

エンジン機能の制限

カテゴリ

機能

説明

SQL 機能

外部キー

サポートされていません

一時テーブル

サポートされていません

生成列

サポートされていません

ハンドラー API

サポートされていません

列と列のプロパティ

テーブルあたりの最大列数

10,000

最大レコード長

256 MB

GIS データ型

geometry、point、linestring、polygon、multipoint、multilinestring、multipolygon、geometrycollection を含む、すべての GIS 関連のデータ型はサポートされていません。

インデックス

ハッシュインデックス

サポートされていません

空間インデックス

サポートされていません。フルテキストインデックスの作成と使用はサポートされていません。

トランザクション

トランザクション分離レベル

次の 2 つの分離レベルがサポートされています:

  • Read Committed (RC)

  • Repeatable Read (RR)

単一トランザクションでサポートされる最大データ量

単一のトランザクションは、デフォルトで最大 100,000 行をサポートします。この値は loose_xengine_bulk_load_size パラメーターを使用して調整できます。

セーブポイント

サポートされていません

XA トランザクション

内部 XA トランザクションはサポートされています。

ロック

ロック粒度

  • テーブルレベルロックと行レベルロックがサポートされています。

  • ギャップロックはサポートされていません。

Skip Locked

サポートされていません

Lock Nowait

サポートされていません

文字セット

インデックスなしの列でサポートされる文字セット

インデックスなしの列では、すべての文字セット (照合順序) がサポートされています。

インデックス付きの列でサポートされる文字セット

  • latin1 (latin1_bin)

  • gbk (gbk_chinese_ci, gbk_bin)

  • utf8 (utf8_general_ci, utf8_bin)

  • utf8mb4 (utf8mb4_0900_ai_ci, utf8mb4_general_ci, utf8mb4_bin)

プライマリ/セカンダリレプリケーション

バイナリログ形式

次の 3 つのフォーマットがサポートされています:

  • stmt

  • row

  • mixed

説明

デフォルトのフォーマットは row です。stmt および mixed フォーマットは、特定の同時実行シナリオでデータセキュリティの問題を引き起こす可能性があります。

説明

デフォルトでは、この表に記載されていない X-Engine の機能は、InnoDB エンジンの機能と同じです。

大規模トランザクションの制限

X-Engine は大規模トランザクションをサポートしていません。トランザクションが 10,000 行以上を変更する場合、X-Engine は commit in middle 機能を有効にします。この機能により、X-Engine は内部的にトランザクションをコミットし、サブトランザクションを開始して元のトランザクションを続行できます。ただし、commit in middle はトランザクションの原子性の原則に厳密には準拠していません。この機能を使用する際は、次の点にご注意ください:

  • 大量のデータを挿入するトランザクションを開始した場合、commit in middle 機能により、挿入プロセス中にデータの一部がコミットされることがあります。その結果、トランザクション全体が完了する前に、他のリクエストがコミットされたデータにアクセスできてしまいます。

  • 大量のデータを変更するトランザクションを開始した場合、commit in middle 機能によってコミットされたトランザクションの一部はロールバックできません。

    DROP TABLE t1;
    CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine;
    BEGIN;
    call insert_data(12000); // 12,000 行を挿入して commit in middle をトリガーします。最初の 10,000 行がコミットされます。
    rollback;// rollback 操作は最後の 2,000 行しかロールバックできません。
    SELECT COUNT(*) FROM t1; // 10,000 行は引き続きクエリできます。
    +----------+
    | COUNT(*) |
    +----------+
    |    10000 |
    +----------+
    1 row in set (0.00 sec)
  • 大量のデータを挿入してから削除するトランザクションを開始した場合、commit in middle 機能により、DELETE 操作が同じトランザクション内で挿入されたばかりの行を読み取れなくなることがあります。その結果、新しく挿入されたデータは削除されません。

    DROP TABLE t1;
    CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine;
    call insert_data(10000);
    BEGIN;
    INSERT INTO t1 VALUES(10001,10001), (10002,10002);
    DELETE FROM t1 WHERE c1 >= 0;// DELETE 操作が commit in middle をトリガーし、現在のトランザクションで挿入された行を操作が読み取るのを防ぎます。
    commit;
    SELECT * FROM t1;
    +-------+-------+
    | c1    | c2    |
    +-------+-------+
    | 10001 | 10001 |
    | 10002 | 10002 |
    +-------+-------+
    2 rows in set (0.00 sec)

パラメーターの説明

次の表のパラメーターは、要件に応じて変更できます。詳細については、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。

PolarDB クラスターパラメーターの変更方法は、コンソールとデータベースセッションで異なります。違いは次のとおりです:

  • PolarDB コンソール

    • 互換性:MySQL 設定ファイルとの互換性のため、PolarDB コンソールの一部のクラスターパラメーターには loose_ プレフィックスが付いています。

    • 手順loose_ プレフィックスが付いているパラメーターを見つけて変更します。

  • データベースセッション (コマンドラインまたはクライアントを使用) 内

    • 手順:データベースセッションで SET コマンドを使用してパラメーターを変更する場合、loose_ プレフィックスを削除し、元のパラメーター名を使用します。

カテゴリ

パラメーター

説明

変更可能

変更後に再起動が必要

パフォーマンス

xengine_batch_group_max_group_size

トランザクションパイプライン内のグループの最大数。

いいえ

N/A

xengine_batch_group_max_leader_wait_time_us

トランザクションパイプラインの最大待機時間。

いいえ

N/A

xengine_batch_group_slot_array_size

トランザクションパイプラインの最大バッチサイズ。

いいえ

N/A

xengine_parallel_read_threads

同時並列スキャンの数。

はい

いいえ

xengine_parallel_wal_recovery

並列リカバリ。

いいえ

N/A

メモリ

xengine_block_cache_size

テーブルデータとインデックスのキャッシュに使用されるブロックキャッシュのサイズ。

はい

いいえ

xengine_row_cache_size

行キャッシュのサイズ。

いいえ

N/A

xengine_write_buffer_size

単一の Memtable の最大サイズ。

いいえ

N/A

xengine_block_size

ディスク上のデータブロックのサイズ。

いいえ

N/A

xengine_db_write_buffer_size

すべてのサブテーブルのアクティブな Memtable の合計サイズ制限。

いいえ

N/A

xengine_db_total_write_buffer_size

すべてのサブテーブルのアクティブおよびイミュータブルな Memtable の合計サイズ制限。

はい

いいえ

xengine_scan_add_blocks_limit

各範囲スキャンリクエストで BlockCache に追加できるブロックの数。

はい

いいえ

コンパクション

xengine_flush_delete_percent_trigger

Memtable スイッチをトリガーするレコードの総数。Memtable 内のレコード数が指定された値に達すると、Memtable スイッチがトリガーされます。

いいえ

N/A

ロック

xengine_max_row_locks

単一の SQL リクエストでロックできる行の最大数。

いいえ

N/A

xengine_lock_wait_timeout

ロック待機タイムアウト期間。

はい

いいえ