本文汇总了与X-Engine相关的常见问题。关于更多高压缩引擎X-Engine的使用问题和RDS X-Engine迁移至PolarDB X-Engine问题请进钉钉群咨询,群号:24490017825。
高压缩引擎(X-Engine)是什么,能解决什么问题?
高压缩引擎(X-Engine)是阿里巴巴自研的基于LSM-tree架构的存储引擎,提供了强大的数据压缩能力,满足了归档数据库低存储成本的要求。通过LSM-Tree(Log-Structured Merge-Tree)层次化架构和Zstandard(ZSTD)压缩算法实现了更高的数据压缩率,相较于使用InnoDB作为存储引擎,最高可节省70%的存储空间。更多信息,请参见高压缩引擎(X-Engine)。
高压缩引擎(X-Engine)压缩效果怎样?
高压缩引擎(X-Engine)默认打开数据压缩功能。一般情况下,相对于InnoDB引擎,存储空间能压缩到1/3至1/10,具体压缩比例与数据特征有关。X-Engine支持通过采样信息来估算压缩比,您可以结合外部信息(如数据导入前的数据大小)自行计算准确的压缩率。
假设需要查询的表在数据库test
中,表名为test1
,来查询表数据估算后的压缩比。SQL语句如下:
SELECT
TABLE_NAME,
SUBTABLE_NAME,
SUM(EXTENTS*APRROX_CMP_RATIO)/SUM(EXTENTS)
FROM
INFORMATION_SCHEMA.XENGINE_SUBTABLE
WHERE TABLE_NAME = 'test.test1' AND SUBTABLE_NAME = 'PRIMARY' AND LEVEL in (1, 2);
SQL语句中XENGINE_SUBTABLE
表的Schema信息如下表:
列名 | 说明 |
TABLE_NAME | 由数据库名称和表名拼接而成。如 |
SUBTABLE_NAME | 索引名称。 |
LEVEL | 逻辑层号。 |
EXTENTS | 逻辑层使用的extent数量。 |
NUM_ENTRIES | 当前逻辑层的数据量。 |
NUM_DELETES | 逻辑层删除的数据量。 |
APRROX_CMP_RATIO | 当前逻辑层采样近似压缩比。 |
SAMPLE_OUTDATED | 当前逻辑层的采样信息是否过期。 |
支持使用SQL语句查询压缩比的企业版集群版本需要满足以下条件之一:
PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.40及以上。
PolarDB MySQL版8.0.2版本,且修订版本为8.0.2.2.22及以上。
X-Engine中的表是基于LSM-Tree的索引组织表,表数据存储在主索引中。主索引LSM-Tree分为3层,大部分数据集中在第1层和第2层,其中第0层是从内存直接转储的数据,不进行数据压缩。因此,查询压缩率的SQL语句中使用
LEVEL in (1, 2)
来计算这两层压缩比的加权平均值,从而得到X-Engine中的表数据的压缩比。如果要查询某个二级索引上的数据的压缩比,需要在SQL语句中指定
SUBTABLE_NAME
索引名称。
批量导入数据到高压缩引擎(X-Engine)后为什么压缩率较低?
高压缩引擎(X-Engine)采用后台异步压缩技术,是在不影响业务使用的情况下,逐渐重整并压缩数据以达到理想压缩率。重整和后台压缩操作一般在业务低峰期进行。因此,批量导入后,数据存储空间可能接近压缩前水平,一段时间后空间将逐步释放。
高压缩引擎(X-Engine)相比RocksDB引擎、TokuDB引擎如何?
高压缩引擎(X-Engine)压缩率与TokuDB、RocksDB引擎压缩率接近。目前TokuDB社区已经停滞发展,后续数据库服务的可持续性无法保证,之前阿里云上存量的TokuDB用户已全部转到高压缩引擎(X-Engine)。相对RocksDB引擎以及对应的myrocks产品,PolarDB高压缩引擎(X-Engine)的核心优势是提供了海量存储,弹性以及在线变更schema的能力。更多信息,请参见X-Engine性价比优势。
购买PolarDB集群时,如何选择使用高压缩引擎(X-Engine)?
PolarDB MySQL版8.0版本支持X-Engine引擎,PolarDB高压缩引擎(X-Engine)的创建方式与PolarDB集群创建方式一致,您只需在售卖页选择数据库引擎为MySQL 8.0.1或MySQL 8.0.2,且存储引擎为InnoDB & 高压缩引擎即可。
已经使用的PolarDB集群,是否支持开启高压缩引擎(X-Engine)?
目前PolarDB的最新版本已经支持存量PolarDB集群开启高压缩引擎(X-Engine)功能。选择PolarDB集群,在左侧导航栏选择 ,在X-Engine高压缩引擎(温数据)页签内开启即可。
动态开启高压缩引擎(X-Engine)的功能需要满足如下条件:
MySQL 8.0.1,且内核小版本需为8.0.1.1.31及以上。
MySQL 8.0.2,且内核小版本需为8.0.2.2.12及以上。
更多信息,请参见前提条件。
如何使用高压缩引擎(X-Engine)?
对于新建表,直接指定ENGINE=xengine
即可;对于存量表,可以通过ALTER语句将表转存至X-Engine。更多信息,请参见使用说明。
如何调整高压缩引擎(X-Engine)内存资源比例?
您可以在集群更多信息,请参见调整内存资源占比。
页面的X-Engine高压缩引擎(温数据)页签中,根据实际业务场景随时调整内存资源比例。高压缩引擎(X-Engine)是否有相关的客户案例?
X-Engine引擎已经支持了阿里巴巴集群和阿里云的大量用户,累计数据量达到PB级别,总体实例数目超过3000个。更多信息,请参见最佳实践。
高压缩引擎(X-Engine)功能是否收费?
购买使用高压缩引擎(X-Engine)与InnoDB引擎计费规则一致,不额外单独收费。具体来说,如果存放在InnoDB引擎的数据是100 GB,存放在高压缩引擎(X-Engine)时数据被压缩为30 GB,就按照30 GB的存储容量计费。
PolarDB(X-Engine)相对于RDS(X-Engine)的优势是什么?
PolarDB(X-Engine)提供了海量的存储空间,彻底解决您的容量焦虑,最大支持500 TB的存储空间,PolarDB(X-Engine)采用存算分离技术,弹性增/减只读节点,一份数据至多支持16个只读节点。PolarDB(X-Engine)采用分布式存储,数据库的高可用不再需要依赖Binlog复制,间接提高了写入性能。
PolarDB MySQL版5.6/5.7版本是否支持高压缩引擎(X-Engine)?
不支持。
高压缩引擎(X-Engine)支持事务吗?
支持事务。
高压缩引擎(X-Engine)支持OnlineDDL吗?
支持,执行DDL变更过程中,不会阻塞其它事务的更新。
高压缩引擎(X-Engine)支持并行DDL吗?
支持。
高压缩引擎(X-Engine)支持行锁吗?
X-Engine引擎支持行粒度的并发控制,并支持死锁检测,与InnoDB引擎一致。
高压缩引擎(X-Engine)支持哪些隔离级别?
支持read-committed和repeatable-read隔离级别,默认的隔离级别是read-committed。
高压缩引擎(X-Engine)支持大事务吗?
不支持大事务。对于大事务,内部会自动按行拆分,当一个事务修改的行数等于或大于10000行时,X-Engine会启用commit in middle功能,即X-Engine会在内部提交该事务,并重新开启一个子事务继续执行该事务。
高压缩引擎(X-Engine)支持分区表吗?
支持。集群需满足以下要求:
PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.34及以上。
PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.16及以上。
该功能目前处于灰度发布阶段,如果需要开启该功能,请前往配额中心,根据配额ID
polardb_mysql_xengine_partition
找到配额名称,在对应的操作列单击申请来申请开通该功能。如需了解更多关于创建X-Engine分区表的内容,请搜索钉钉群号加群进行咨询。钉钉群号:24490017825。
高压缩引擎(X-Engine)支持列索引分析吗?
不支持。
高压缩引擎(X-Engine)有哪些功能限制?
X-Engine引擎是一个事务引擎,完全兼容MySQL协议,具备存储引擎常用功能,对于一些高级功能的支持还不完善。具体使用限制,请参见使用限制。
高压缩引擎(X-Engine)支持不同存储介质冷热分离吗?
不支持。
高压缩引擎(X-Engine)支持并行查询吗?
目前仅PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.34及以上的版本支持并行查询。
高压缩引擎(X-Engine)是否支持Serverless功能?
开启高压缩引擎(X-Engine)的固定规格集群,在内核小版本满足的情况下可以开启Serverless功能,版本详细要求请参见小版本升级。 Serverless集群不支持开启X-Engine引擎。
高压缩引擎(X-Engine)的性能怎样?
X-Engine引擎采用LSM-tree组织数据,写入友好,写入性能强,读能力相对较弱。X-Engine引擎默认对数据开启压缩,综合性能相对于InnoDB引擎略有下降,在标准Sysbench压测场景下,性能较InnoDB引擎下降10%-20%之间。详情请参见PolarDB MySQL版8.0.1版本高压缩引擎(X-Engine)与集群版性能对比。
如何查看高压缩引擎(X-Engine)中的表占用的存储空间容量?
使用集群主地址连接数据库集群,根据需要查询的库名和表名在XENGINE_SUBTABLE
表中查询该表对应的TABLE_SPACE_ID
,并通过查询到的TABLE_SPACE_ID
在INFORMATION_SCHEMA的XENGINE_TABLE_SPACE
表中查看该表已使用的extent数量,再根据extent数量计算出该表占用的存储空间容量。
单个extent占用的存储空间容量为2 MB。
假设要查询的表所在的数据库为test
,表名为test1
,则查询表占用的存储空间容量的SQL语句如下:
SELECT
SUM(TOTAL_EXTENT_COUNT)/512 AS SIZE_GB,
SUM(USED_EXTENT_COUNT)/512 AS USED_SIZE_GB,
SUM(FREE_EXTENT_COUNT)/512 AS FREE_SIZE_GB
FROM
INFORMATION_SCHEMA.XENGINE_TABLE_SPACE
WHERE TABLE_SPACE_ID IN (
SELECT TABLE_SPACE_ID
FROM
INFORMATION_SCHEMA.XENGINE_SUBTABLE
WHERE TABLE_NAME = 'test.test1');
其中,XENGINE_TABLE_SPACE
是以文件视角来统计存储空间容量。该表中与空间相关的列及其说明如下:
列名 | 说明 |
TABLE_SPACE_ID | 表空间的ID。 说明 您可以在 |
TOTAL_EXTENT_COUNT | 总extent数量。 |
USED_EXTENT_COUNT | 已使用的extent数量。 |
FREE_EXTENT_COUNT | 空闲extent数量。 |
XENGINE_SUBTABLE
是以LSM各个层的角度来统计存储空间容量。该表中的列及其说明如下:
列名 | 说明 |
TABLE_NAME | 数据库名和表名的拼接。如数据库名为 |
SUBTABLE_NAME | 索引名。 |
SUBTABLE_ID | 索引ID。 |
TABLE_SPACE_ID | 索引对应的table space ID。 |
LEVEL | 逻辑层号。 |
LAYER | 逻辑层中的物理层。 说明 level 0可能存在多个物理层,level1和level2只有一个物理层。 |
EXTENTS | 该层使用的extent数量。 |