本トピックでは、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;メモリリソース比率の調整
クラスターの ページの [X-Engine (ウォームデータ)] タブで、要件に合わせていつでもメモリリソースの比率を調整できます。
次の表に、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 つの分離レベルがサポートされています:
|
単一トランザクションでサポートされる最大データ量 | 単一のトランザクションは、デフォルトで最大 100,000 行をサポートします。この値は | |
セーブポイント | サポートされていません | |
XA トランザクション | 内部 XA トランザクションはサポートされています。 | |
ロック | ロック粒度 |
|
Skip Locked | サポートされていません | |
Lock Nowait | サポートされていません | |
文字セット | インデックスなしの列でサポートされる文字セット | インデックスなしの列では、すべての文字セット (照合順序) がサポートされています。 |
インデックス付きの列でサポートされる文字セット |
| |
プライマリ/セカンダリレプリケーション | バイナリログ形式 | 次の 3 つのフォーマットがサポートされています:
説明 デフォルトのフォーマットは 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 クラスターパラメーターの変更方法は、コンソールとデータベースセッションで異なります。違いは次のとおりです:
互換性: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 | ロック待機タイムアウト期間。 | はい | いいえ |