X-Engine は、ウォームデータ向けに最適化されたストレージエンジンです。LSM ツリーアーキテクチャを採用しており、InnoDB と比較してストレージコストを削減できます。そのため、ホットデータほど頻繁ではないものの、依然としてアクセスや更新が行われるデータに適しています。
前提条件
開始する前に、ご利用のクラスターが次の要件をすべて満たしていることを確認してください。
リビジョンバージョンが 8.0.1.1.31 以降、または 8.0.2.2.12 以降であること。バージョンを確認するには、「エンジンバージョンのクエリ」をご参照ください。
このクラスターは、「マルチマスタークラスター (Limitless) Edition」ではありません。この Edition では X-Engine はサポートされていません。
プライマリノードのメモリが 8 GB 以上であること。読み取り専用ノードのスペックは、プライマリノード以上である必要があります。
クラスターがグローバルデータベースネットワーク (GDN) に参加していないこと。
制限事項
機能の制限
X-Engine は InnoDB のすべての機能をサポートしているわけではありません。次の表に記載されていない機能は、InnoDB と同じように動作します。
| カテゴリ | 特徴 | 動作 |
|---|
| SQL | 外部キー | 非対応 |
| SQL | 一時テーブル | 非対応 |
| SQL | 生成列 | 非対応 |
| SQL | ハンドラー API | 非対応 |
| 列のプロパティ | 最大列長 (longblob, longtext, json) | 32 MB |
| GIS データの型 | GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEMOMETRYCOLLECTION | 非対応 |
| インデックス | ハッシュインデックス | 非対応 |
| インデックス | 空間インデックスとフルテキストインデックス | 非対応 |
| トランザクション | サポートされる分離レベル | リードコミッティド (RC) とリピータブルリード (RR) のみ |
| トランザクション | トランザクションあたりの最大データ量 | 32 MB |
| トランザクション | セーブポイント | 非対応 |
| トランザクション | XA トランザクション | 内部 XA トランザクションのみ |
| ロック | サポートされるロック粒度 | テーブルレベルロックと行レベルロック (ギャップロックは非対応) |
| ロック | SKIP LOCKED | 非対応 |
| ロック | NOWAIT | 非対応 |
| 文字セット | インデックスなしの列 | すべての文字セット |
| 文字セット | インデックス付きの列 | Latin1 (latin1_bin)、GBK (gbk_chinese_ci, gbk_bin)、UTF-8 (utf8_general_ci, utf8_bin)、UTF-8MB4 (utf8mb4_0900_ai_ci, utf8mb4_general_ci, utf8mb4_bin) |
| レプリケーション | バイナリログ形式 | stmt、row、mixed。デフォルトの形式は row です。 |
説明 `stmt` および `mixed` バイナリログ形式は、特定の同時書き込みシナリオでデータセキュリティの問題を引き起こす可能性があります。書き込み負荷の高いワークロードでは `row` 形式を使用してください。
大規模トランザクションの制限
X-Engine は大規模トランザクションをサポートしていません。トランザクションが 10,000 行以上を変更すると、X-Engine は自動的に commit in middle メカニズムをトリガーします。これにより、内部でデータがバッチでコミットされ、サブトランザクションが開始されて処理が続行されます。この動作はトランザクションの原子性を保証しません。
重要 commit in middle メカニズムはエラーを生成しません。これはトランザクションのセマンティクスを暗黙的に変更します。単一の操作で 10,000 行以上を変更するトランザクションを避けるように、アプリケーションを設計してください。
以下の例は、commit in middle がさまざまな操作にどのように影響するかを示しています。
大規模な挿入後の部分的なロールバック
大規模な INSERT トランザクションが 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; -- 最後の 2,000 行のみがロールバックされます
SELECT COUNT(*) FROM t1;
期待される出力:
+----------+
| COUNT(*) |
+----------+
| 10000 |
+----------+
1 row in set (0.00 sec)
DELETE はトランザクションの途中でコミットされた行を読み取れない
同じ大規模トランザクション内で DELETE の前に INSERT がある場合、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; -- commit in middle をトリガー。挿入された 2 行は削除されません
COMMIT;
SELECT * FROM t1;
期待される出力:
+-------+-------+
| c1 | c2 |
+-------+-------+
| 10001 | 10001 |
| 10002 | 10002 |
+-------+-------+
2 rows in set (0.00 sec)
注意事項
X-Engine を有効にすると、クラスターの自動再起動がトリガーされます。約 30 秒の接続中断が予想されます。オフピーク時間帯に X-Engine を有効にし、ご利用のアプリケーションが自動再接続をサポートしていることを確認してください。
有効化後、X-Engine を無効にすることはできません。
有効化後、クラスターは GDN に参加できなくなります。
X-Engine の有効化
ご利用のクラスターが既に存在するかどうかに基づいて、次のいずれかの方法を選択してください。
方法1:既存のクラスターで X-Engine を有効化
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。リージョンを選択し、クラスター ID をクリックして [基本情報] ページを開きます。
左側のナビゲーションウィンドウで、[設定と管理] > [データライフサイクル] を選択します。[X-Engine (ウォームデータ)] タブをクリックし、[有効化] をクリックします。
説明 [X-Engine (ウォームデータ)] タブが表示されない場合は、ご利用のクラスターが上記の前提条件をすべて満たしていることを確認してください。

[X-Engine の割合を設定] ダイアログボックスで、ワークロードに基づいて X-Engine のメモリとストレージの割合を設定し、[今すぐ有効化] をクリックします。次の表を参考に、開始時の割合を選択してください。
| シナリオ | InnoDB (%) | X-Engine (%) |
|---|
| ほとんどがホットデータで、アクセス頻度の低いコールドデータがある | 80 | 20 |
| ホットデータと、依然として更新・クエリされるコールドデータが混在している | 50 | 50 |
| 少量のホットデータと、更新・クエリ対象の大量のウォームデータがある | 20 | 80 |
説明 X-Engine (%) は 10% から 90% の間に設定する必要があります。すべてのテーブルで X-Engine を使用する場合は、X-Engine (%) を 90% に設定します。有効化後、[設定と管理] > [データライフサイクル] の [X-Engine (ウォームデータ)] タブで割合を調整します。
方法2:クラスター購入時に X-Engine を有効化
新しいクラスターで X-Engine を有効にするには、[ストレージエンジン] パラメーターを InnoDB & X-Engine に設定し、クラスターの購入時に X-Engine (%) の値を設定します。詳細については、「クラスターの購入」の [ストレージエンジン] パラメーターをご参照ください。


説明 クラスターが作成された後、[X-Engine (ウォームデータ)] タブの割合を [設定項目と管理] > [データライフサイクル] の下で調整します。