全部产品
Search
文档中心

云原生数据库 PolarDB:归档为X-Engine引擎格式

更新时间:Feb 10, 2026

当业务数据持续增长时,将所有数据(包括访问频率较低的温、冷数据)存储在标准的InnoDB表中,会导致存储成本不断攀升。若将这些数据归档至外部存储,又会丧失在线读写和分析的能力。PolarDB MySQL版提供了基于X-Engine的数据分层存储能力。您可以将整张表或表中的特定分区转换为使用高压缩率的X-Engine引擎,从而在同一张表中实现InnoDB(热数据)与X-Engine(温/冷数据)的混合存储。这能够在不牺牲数据在线访问能力的前提下,降低您的存储成本,数据在X-Engine中依然支持DML写入和Online DDL表结构变更。

工作原理

PolarDB MySQL版的混合分区功能允许一张分区表内的不同分区使用不同的存储引擎。其工作原理如下:

  • 数据分层:您可以将频繁访问的“热”数据分区保留为InnoDB引擎,以获得最佳的读写性能。同时,将访问频率较低的“温”或“冷”数据分区迁移至X-Engine引擎。

  • 智能路由:当您对该表发起查询时,PolarDB会根据查询条件,自动将请求路由到对应数据所在的正确分区及其存储引擎,整个过程对应用层透明。

  • 高压缩率:X-Engine引擎通过其先进的压缩算法和可选的列存格式,能够实现极高的数据压缩比,从而大幅减少物理存储空间占用,降低成本。

适用范围

使用本功能前,请确保您的PolarDB MySQL版集群版本满足以下要求。

  • 归档普通表:

    • MySQL 8.0.1且修订版本为8.0.1.1.31或以上。

    • MySQL 8.0.2且修订版本为8.0.2.2.12及以上。

  • 归档分区表:MySQL 8.0.2且修订版本为8.0.2.2.12及以上。

  • 归档为X-Engine列存表MySQL 8.0.2且修订版本为8.0.2.2.33及以上。

准备工作

在开始归档数据前,您需要完成以下准备。

  1. 开启高压缩引擎(X-Engine):使其可以作为表或分区的存储引擎选项。

  2. 开启混合分区:对于内核小版本小于8.0.2.2.33的集群,请前往配额中心,根据配额ID polardb_mysql_hybrid_partition找到配额名称,在对应的操作列单击申请来开通该功能。

归档普通表

将一整张非分区表的数据和存储引擎从InnoDB转换为X-Engine。

语法

ALTER TABLE table_name ENGINE=engine_name[ TABLE_FORMAT=COLUMN];

参数说明

参数

参数说明

table_name

需要归档为X-Engine的表名。

engine_name

存储数据的引擎名称。

  • XEngine:归档为X-Engine格式引擎。

  • InnoDB:导回为InnoDB引擎。

TABLE_FORMAT

X-Engine数据存储格式,可选项。

  • ROW(默认):行存表。

  • COLUMN:列存表。

示例

  • 归档普通表t1为XEngine行存表:

    ALTER TABLE t1 ENGINE=XEngine;
  • 归档普通表t1为XEngine列存表:

    ALTER TABLE t1 ENGINE=XEngine TABLE_FORMAT=COLUMN;
  • 将普通表t1数据导回为InnoDB引擎:

    ALTER TABLE t1 ENGINE=InnoDB;

归档分区表

归档指定分区

将分区表中的特定分区(通常是存储冷数据的旧分区)归档至X-Engine,实现冷热数据分层存储,归档后的表为混合分区表。

语法

ALTER TABLE table_name CHANGE PARTITION part_name ENGINE = XEngine[ TABLE_FORMAT=COLUMN];

参数说明

参数

参数说明

table_name

需要归档为X-Engine的表名。

part_name

需要归档为X-Engine的分区名。

TABLE_FORMAT

X-Engine数据存储格式,可选项。

  • ROW(默认):行存。

  • COLUMN:列存表。

示例

  • 归档分区表t1p1分区为X-Engine引擎行存格式:

    ALTER TABLE t1 CHANGE PARTITION p1 ENGINE = XEngine;
  • 归档分区表t1p1分区为X-Engine引擎列存表:

    ALTER TABLE t1 CHANGE PARTITION p1 ENGINE = XEngine TABLE_FORMAT=COLUMN;

导回为InnoDB引擎

语法

ALTER TABLE table_name REORGANIZE PARTITION part_name INTO (partition_definition);

参数说明

参数

参数说明

table_name

混合分区表名。

part_name

需要导回为InnoDB引擎的分区名。

partition_definition

与需要导回的分区的partition_definition保持一致。

说明

分区定义中的ENGINE为可选项。未标记引擎名称时,默认为与表相同的引擎InnoDB。若标记为ENGINE=InnoDB,则使用InnoDB引擎。

示例

将归档在X-Engine上的分区表t1p1分区上的数据导回为InnoDB引擎。

ALTER TABLE t1 REORGANIZE PARTITION p1 INTO(PARTITION p1 VALUES LESS THAN(100));

应用于生产环境

  • 最佳实践:建议仅对访问频率较低的温、冷数据归档为X-Engine,以在成本和查询性能之间取得最佳平衡。对于写入密集型但压缩潜力大的数据(如日志、埋点数据),优先考虑使用X-Engine的列存格式(TABLE_FORMAT=COLUMN)。

  • 风险防范:数据迁移(ALTER TABLE)是一项资源密集型操作。尽管它在线进行,但仍建议在业务低峰期执行,以避免对生产负载造成性能抖动。

  • 监控与告警:在归档过程中,您可以通过SHOW FULL PROCESSLIST; 命令查看DDL操作的进度。同时,密切关注控制台上集群的CPU使用率、IOPS和磁盘空间等关键指标。