使用說明
PolarDB MySQL版支持使用X-Engine引擎,其具有較高的數(shù)據(jù)壓縮率,非常適合對(duì)計(jì)算訴求不高但需要存儲(chǔ)一些歸檔類數(shù)據(jù)(如釘釘消息等數(shù)據(jù))的業(yè)務(wù)。X-Engine引擎可以與InnoDB引擎共存,對(duì)于歸檔類的數(shù)據(jù)采用X-Engine引擎進(jìn)行壓縮存儲(chǔ),以節(jié)省存儲(chǔ)成本。您可以參考如何開啟高壓縮引擎(X-Engine)文檔來開啟高壓縮引擎(X-Engine)。本文介紹PolarDB高壓縮引擎(X-Engine)相關(guān)的使用說明。
使用限制
引擎功能限制
X-Engine引擎在功能上有如下限制。
分類
功能
說明
SQL功能
外鍵
不支持
臨時(shí)表
不支持
Generated Column
不支持
Handler API
不支持
列屬性
最大列長度
(longblob/longtext/json)
32 MB
GIS地理數(shù)據(jù)類型
不支持所有GIS相關(guān)數(shù)據(jù)類型(包含geometry、point、linestring、polygon、multipoint、multilinestring、multipolygon、geometrycollection)
索引
哈希索引
不支持
空間索引
不支持(所有與全文索引相關(guān)的創(chuàng)建、使用均不支持)
事務(wù)
事務(wù)隔離級(jí)別
支持如下2個(gè)隔離級(jí)別:
讀已提交(RC)
可重復(fù)讀(RR)
單個(gè)事務(wù)支持的最大數(shù)據(jù)量
32 MB
Savepoint
不支持
XA事務(wù)
支持內(nèi)部XA事務(wù)
鎖
鎖粒度
支持表級(jí)別鎖和行級(jí)別鎖
不支持GAP鎖
Skip Locked
不支持
Lock Nowait
不支持
字符集
非索引列支持的字符集
非索引列支持所有的字符集(校對(duì)規(guī)則)
索引列支持的字符集
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)
主從復(fù)制
Binlog格式
支持如下3種格式:
stmt
row
mixed
說明默認(rèn)為row,采用stmt/mixed在特定并發(fā)場(chǎng)景可能存在數(shù)據(jù)安全性問題。
說明對(duì)于X-Engine引擎中其他未列出的功能,默認(rèn)其功能特性與InnoDB引擎相同。
大事務(wù)功能限制
X-Engine目前不支持大事務(wù)。當(dāng)一個(gè)事務(wù)修改的行數(shù)等于或大于10000行時(shí),X-Engine會(huì)啟用
commit in middle
功能,即X-Engine會(huì)在內(nèi)部提交該事務(wù),并重新開啟一個(gè)子事務(wù)繼續(xù)執(zhí)行該事務(wù)。但commit in middle
并不能遵循嚴(yán)格意義上的事務(wù)原子性(Atomicity),因此您在使用過程中需要注意如下幾點(diǎn):假設(shè)需要開啟一個(gè)事務(wù)插入大量數(shù)據(jù),但在數(shù)據(jù)插入過程中,由于
commit in middle
功能,已經(jīng)先提交了一部分?jǐn)?shù)據(jù),其它請(qǐng)求就可以訪問到插入的數(shù)據(jù)。假設(shè)需要開啟一個(gè)事務(wù)修改大量數(shù)據(jù),已經(jīng)執(zhí)行了
commit in middle
的事務(wù)將無法回滾。DROP TABLE t1; CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine; BEGIN; call insert_data(12000); //插入12000行數(shù)據(jù),觸發(fā)commit in middle,前10000行數(shù)據(jù)已經(jīng)提交。 rollback;// 回滾只能把最后2000條數(shù)據(jù)回滾。 SELECT COUNT(*) FROM t1; // 這里仍然能夠查詢到10000條數(shù)據(jù)。 +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.00 sec)
假設(shè)開啟一個(gè)需要修改且刪除大量數(shù)據(jù)的事務(wù),由于
commit in middle
功能,DELETE操作讀不到本事務(wù)中新插入的行,導(dǎo)致新插入的數(shù)據(jù)未被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操作觸發(fā)commit in middle,導(dǎo)致delete操作沒有讀到本事務(wù)插入的行。 commit; SELECT * FROM t1; +-------+-------+ | c1 | c2 | +-------+-------+ | 10001 | 10001 | | 10002 | 10002 | +-------+-------+ 2 rows in set (0.00 sec)
將InnoDB引擎下的表轉(zhuǎn)存至高壓縮引擎(X-Engine)
使用DMS、客戶端或命令行連接數(shù)據(jù)庫,具體操作請(qǐng)參見連接數(shù)據(jù)庫集群。
執(zhí)行以下命令,將InnoDB引擎下的表轉(zhuǎn)存至X-Engine引擎。
ALTER TABLE <數(shù)據(jù)庫名>.<表名> ENGINE xengine;
說明使用
ALTER
命令將InnoDB引擎下的表轉(zhuǎn)存至X-Engine引擎的過程中,會(huì)阻塞轉(zhuǎn)換涉及的表的寫入操作(DML和DDL)。
在高壓縮引擎(X-Engine)中創(chuàng)建表
在雙引擎(InnoDB和X-Engine)集群中創(chuàng)建位于X-Engine引擎的表,您需要在創(chuàng)建表時(shí)指定X-Engine引擎。語法示例如下:
CREATE TABLE t1(c1 int primary key , c2 int) ENGINE=xengine;
參數(shù)說明
針對(duì)表中可修改的參數(shù),您可以根據(jù)業(yè)務(wù)需要進(jìn)行修改。具體操作步驟,請(qǐng)參見設(shè)置集群參數(shù)和節(jié)點(diǎn)參數(shù)。
表中所有參數(shù)在PolarDB控制臺(tái)上都已加上MySQL配置文件的兼容性前綴
loose_
。
類別 | 參數(shù) | 說明 | 是否支持修改 | 參數(shù)修改后,是否需要重啟集群生效 |
性能 | xengine_batch_group_max_group_size | 事務(wù)流水線最大分組數(shù)。 | 否 | 不涉及 |
xengine_batch_group_max_leader_wait_time_us | 事務(wù)流水線的最大等待時(shí)間。 | 否 | 不涉及 | |
xengine_batch_group_slot_array_size | 事務(wù)流水線最大batch大小。 | 否 | 不涉及 | |
xengine_parallel_read_threads | 并行掃描并發(fā)數(shù)。 | 是 | 否 | |
xengine_parallel_wal_recovery | 并行恢復(fù)。 | 否 | 不涉及 | |
內(nèi)存 | xengine_block_cache_size | 讀block緩存的大小。 | 否 | 不涉及 |
xengine_row_cache_size | 行緩存的大小。 | 否 | 不涉及 | |
xengine_write_buffer_size | 單Memtable的最大大小。 | 否 | 不涉及 | |
xengine_block_size | 磁盤上數(shù)據(jù)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 | 每個(gè)請(qǐng)求在范圍掃描時(shí),可以加到BlockCache中的Block數(shù)目。 | 是 | 否 | |
compaction | xengine_flush_delete_percent_trigger | 當(dāng)Memtable中記錄數(shù)超過此數(shù)目時(shí),則xengine_flush_delete_record_trigger參數(shù)生效。 | 否 | 不涉及 |
鎖 | xengine_max_row_locks | 單SQL請(qǐng)求中,最大可以鎖定的行數(shù)。 | 否 | 不涉及 |
xengine_lock_wait_timeout | 鎖等待超時(shí)時(shí)間。 | 是 | 否 |