文档

X-Engine引擎常见问题

更新时间:

本文汇总了与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

由数据库名称和表名拼接而成。如test.test1

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引擎相比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,且系列高压缩引擎(X-Engine)即可。

已经使用的PolarDB集群,是否支持开启X-Engine引擎?

目前PolarDB的最新版本已经支持存量PolarDB集群开启X-Engine引擎功能。选择PolarDB集群,在左侧导航栏选择配置与管理->高压缩引擎即可。动态开启X-Engine引擎的功能需要PolarDB MySQL版8.0版本且内核小版本需为8.0.1.1.31及以上。

如何使用X-Engine引擎表?

对于新建表,直接指定engine=xengine即可;对于存量表,可以通过ALTER语句将表转换为X-Engine引擎。相关文档请参见InnoDB/TokuDB/Myrocks引擎转换为X-Engine引擎

X-Engine是否有相关的客户案例?

X-Engine引擎已经支持了阿里巴巴集群和阿里云的大量用户,累计数据量达到PB级别,总体实例数目超过3000+。客户案例相关文档请参见X-Engine最佳实践

X-Engine引擎功能是否收费?

购买使用X-Engine引擎与InnoDB引擎计费规则一致,不额外单独收费。具体来说,如果存放在InnoDB引擎的数据是100 GB,存放在X-Engine引擎时数据被压缩为30 GB,就按照30 GB的存储容量计费。

PolarDB(X-Engine)相对于RDS(X-Engine)优势是什么?

PolarDB(X-Engine)提供了海量的存储空间,彻底解决用户的容量焦虑,最大支持100 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及以上。

说明
  • 该功能目前处于灰度发布阶段,如果需要开启该功能,请前往配额中心,根据配额IDpolardb_mysql_xengine_partition找到配额名称,在对应的操作列单击申请来申请开通该功能。

  • 如需了解更多关于创建X-Engine分区表的内容,请搜索钉钉群号加群进行咨询。钉钉群号:24490017825。

X-Engine支持列索引分析吗?

不支持。

X-Engine引擎有哪些功能限制?

X-Engine引擎是一个事务引擎,完全兼容MySQL协议,具备存储引擎常用功能,对于一些高级功能的支持还不完善,具体使用限制请参见X-Engine使用说明

X-Engine支持不同存储介质冷热分离吗?

不支持。

X-Engine支持并行查询吗?

目前仅PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.34及以上的版本支持并行查询。

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_IDINFORMATION_SCHEMAXENGINE_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。

说明

您可以在XENGINE_SUBTABLE表中通过表名查询该值。

TOTAL_EXTENT_COUNT

总extent数量。

USED_EXTENT_COUNT

已使用的extent数量。

FREE_EXTENT_COUNT

空闲extent数量。

XENGINE_SUBTABLE是以LSM各个层的角度来统计存储空间容量。该表中的列及其说明如下:

列名

说明

TABLE_NAME

数据库名和表名的拼接。如数据库名为test,表名为test1,则TABLE_NAME为test.test1

SUBTABLE_NAME

索引名。

SUBTABLE_ID

索引ID。

TABLE_SPACE_ID

索引对应的table space ID。

LEVEL

逻辑层号。

LAYER

逻辑层中的物理层。

说明

level 0可能存在多个物理层,level1和level2只有一个物理层。

EXTENTS

该层使用的extent数量。