本文將為您介紹如何使用高壓縮引擎(X-Engine)。
將InnoDB引擎下的錶轉存至高壓縮引擎(X-Engine)
您可以執行以下命令,將InnoDB引擎下的錶轉存至X-Engine引擎。
ALTER TABLE <資料庫名>.<表名> 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高压缩引擎(温数据)頁簽中,根據實際業務情境隨時調整記憶體資源比例。
以下為您展示三種典型情境下的儲存引擎記憶體資源佔比配置,供您參考。您可根據實際業務情境進行配置。
|
適用情境 |
InnoDB引擎記憶體資源佔比(百分比) |
X-Engine記憶體資源佔比(百分比) |
|
使用InnoDB引擎儲存熱資料,X-Engine引擎儲存冷資料,且歸檔後的冷資料基本不會被訪問。 |
80 |
20 |
|
使用InnoDB引擎儲存熱資料,X-Engine引擎儲存冷資料,且歸檔後的冷資料仍然會被更新或查詢。 |
50 |
50 |
|
使用InnoDB引擎儲存少量表,X-Engine引擎儲存大量表,並且資料會被更新或查詢。 |
20 |
80 |
使用限制
高壓縮引擎(X-Engine)存在引擎以及大事務功能上的相關限制。
引擎功能限制
|
分類 |
功能 |
說明 |
|
SQL功能 |
外鍵 |
不支援 |
|
暫存資料表 |
不支援 |
|
|
Generated Column |
不支援 |
|
|
Handler API |
不支援 |
|
|
列與列屬性 |
表的列最大數量 |
10000列 |
|
最大記錄長度 |
256 MB |
|
|
GIS地理資料類型 |
不支援所有GIS相關資料類型(包含geometry、point、linestring、polygon、multipoint、multilinestring、multipolygon、geometrycollection) |
|
|
索引 |
雜湊索引 |
不支援 |
|
空間索引 |
不支援(所有與全文索引相關的建立、使用均不支援) |
|
|
事務 |
交易隔離等級 |
支援如下2個隔離等級:
|
|
單個事務支援的最巨量資料量 |
預設單個事務100000行數,您可以通過參數 |
|
|
Savepoint |
不支援 |
|
|
XA事務 |
支援內部XA事務 |
|
|
鎖 |
鎖粒度 |
|
|
Skip Locked |
不支援 |
|
|
Lock Nowait |
不支援 |
|
|
字元集 |
非索引列支援的字元集 |
非索引列支援所有的字元集(校對規則) |
|
索引列支援的字元集 |
|
|
|
主從複製 |
Binlog格式 |
支援如下3種格式:
說明
預設為row,採用stmt/mixed在特定並發情境可能存在資料安全性問題。 |
對於X-Engine引擎中其他未列出的功能,預設其功能特性與InnoDB引擎相同。
大事務功能限制
X-Engine目前不支援大事務。當一個事務修改的行數等於或大於10000行時,X-Engine會啟用commit in middle功能,即X-Engine會在內部提交該事務,並重新開啟一個子事務繼續執行該事務。但commit in middle並不能遵循嚴格意義上的事務原子性(Atomicity),因此您在使用過程中需要注意如下幾點:
-
假設需要開啟一個事務插入大量資料,但在資料插入過程中,由於
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); //插入12000行資料,觸發commit in middle,前10000行資料已經提交。 rollback;// 復原只能把最後2000條資料復原。 SELECT COUNT(*) FROM t1; // 這裡仍然能夠查詢到10000條資料。 +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.00 sec) -
假設開啟一個需要修改且刪除大量資料的事務,由於
commit in middle功能,DELETE操作讀不到本事務中新插入的行,導致新插入的資料未被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,導致delete操作沒有讀到本事務插入的行。 commit; SELECT * FROM t1; +-------+-------+ | c1 | c2 | +-------+-------+ | 10001 | 10001 | | 10002 | 10002 | +-------+-------+ 2 rows in set (0.00 sec)
參數說明
針對錶中可修改的參數,您可以根據實際業務情境進行修改。具體操作步驟,請參見設定叢集參數和節點參數。
PolarDB叢集參數在控制台與會話中修改方式存在差異,詳細區別如下:
在PolarDB控制台上修改:
相容性說明:部分叢集參數在PolarDB控制台上均已添加MySQL設定檔的相容性首碼loose_。
操作方法:找到並修改這些帶
loose_首碼的參數。
在資料庫會話中修改(使用命令列或用戶端):
操作方法:當您串連到資料庫,使用
SET命令修改參數時,請去掉loose_首碼,直接使用參數的原始名稱進行修改。
|
類別 |
參數 |
說明 |
是否支援修改 |
參數修改後,是否需要重啟叢集生效 |
|
效能 |
xengine_batch_group_max_group_size |
事務流水線最大分組數。 |
否 |
不涉及 |
|
xengine_batch_group_max_leader_wait_time_us |
事務流水線的最大等待時間。 |
否 |
不涉及 |
|
|
xengine_batch_group_slot_array_size |
事務流水線最大batch大小。 |
否 |
不涉及 |
|
|
xengine_parallel_read_threads |
並行掃描並發數。 |
是 |
否 |
|
|
xengine_parallel_wal_recovery |
並行恢複。 |
否 |
不涉及 |
|
|
記憶體 |
xengine_block_cache_size |
用於緩衝其表的資料和索引的塊緩衝大小。 |
是 |
否 |
|
xengine_row_cache_size |
行緩衝的大小。 |
否 |
不涉及 |
|
|
xengine_write_buffer_size |
單個Memtable的最大大小。 |
否 |
不涉及 |
|
|
xengine_block_size |
磁碟上資料block大小。 |
否 |
不涉及 |
|
|
xengine_db_write_buffer_size |
所有subtable的Active Memtable的總大小限制。 |
否 |
不涉及 |
|
|
xengine_db_total_write_buffer_size |
所有subtable的Active Memtable/Immutable memtable的總大小限制。 |
是 |
否 |
|
|
xengine_scan_add_blocks_limit |
每個請求在範圍掃描時,可以加到BlockCache中的Block數目。 |
是 |
否 |
|
|
compaction |
xengine_flush_delete_percent_trigger |
觸發切換Memtable的總記錄數。當Memtable中的記錄數達到預設值時,會觸發Memtable的切換。 |
否 |
不涉及 |
|
鎖 |
xengine_max_row_locks |
單SQL請求中,最大可以鎖定的行數。 |
否 |
不涉及 |
|
xengine_lock_wait_timeout |
鎖等待逾時時間。 |
是 |
否 |