PolarDB提供DDL Redo压缩功能,对DDL创建索引、重建表过程中生成的Redo日志进行压缩后再写入,减少Redo写入量,缓解Redo写入带宽压力,降低DDL期间对在线写入业务的影响。
背景信息
在执行ALTER TABLE创建索引、OPTIMIZE TABLE等需要重建索引或重建表的DDL时,构建B+树阶段会快速产生大量Redo日志。开启并行DDL后,Redo写入速度更快,容易让Redo写入带宽成为集群瓶颈,既影响DDL自身的执行效率,也可能造成集群上其他写入业务的抖动。
DDL Redo压缩功能对DDL过程中生成的Redo进行压缩后再写入,可以实现:
减少Redo写入量,缓解Redo写入带宽压力。
进一步发挥并行DDL的吞吐能力,缩短DDL执行时间。
降低DDL期间对在线写入业务的影响。
降低物理复制带宽与回放压力。
适用场景
DDL Redo压缩在以下走批量构建B+树路径的DDL中生效:
创建二级索引,例如
ALTER TABLE ... ADD INDEX。重建表,例如
ALTER TABLE ... ENGINE=InnoDB。上述DDL的并行DDL能力,需要配合innodb_polar_parallel_ddl_threads参数(控制每一个DDL操作的并行线程数)使用。
普通DML写入(INSERT、UPDATE、DELETE、LOAD DATA)不会触发此优化,无需额外关注。
适用范围
PolarDB集群版本需为以下版本之一,您可以通过查询版本号确认集群版本:
MySQL 8.0.2,且内核小版本为8.0.2.2.27及以上。
MySQL 8.0.1,且内核小版本为8.0.1.1.52及以上。
MySQL 5.7,且内核小版本为5.7.1.0.39及以上。
使用限制
仅对通过批量加载(Bulk Load)构建B+树的Inplace DDL生效,不支持Copy DDL,普通DML不受影响。
仅支持InnoDB存储引擎的表。
不支持临时表和
ROW_FORMAT=COMPRESSED的压缩表。不支持全文索引(
FULLTEXT)和空间索引(SPATIAL)。
参数说明
DDL Redo压缩涉及以下参数,您可以通过在PolarDB控制台上进行设置:
兼容性说明:部分集群参数在PolarDB控制台上均已添加MySQL配置文件的兼容性前缀loose_。
操作方法:找到并修改这些带
loose_前缀的参数。
参数 | 级别 | 说明 |
loose_innodb_bulk_load_redo_compress_enable | Global | 控制DDL Redo压缩的作用范围,取值如下:
|
loose_innodb_bulk_load_redo_compress_algorithm | Global | 选择压缩算法,取值如下:
|
使用方法
开启压缩
通过控制台修改集群参数开启DDL Redo压缩。具体操作请参见设置集群参数和节点参数。
登录PolarDB控制台。
在左侧导航栏中,选择。
搜索参数loose_innodb_bulk_load_redo_compress_enable,根据需要修改取值:
仅压缩二级索引:设置为
secondary。同时压缩主键和二级索引:设置为
all。
执行DDL
参数设置生效后,执行相关DDL操作即可自动触发Redo压缩,示例如下:
ALTER TABLE t1 ADD INDEX idx_b (b);
ALTER TABLE t1 ENGINE = InnoDB;
OPTIMIZE TABLE t1;关闭压缩
在页面,将loose_innodb_bulk_load_redo_compress_enable设置为none。
观测方法
通过SHOW ENGINE INNODB STATUS查看
执行SHOW ENGINE INNODB STATUS后,在DDL OPERATIONS子项中查看DDL Redo写入量、压缩前后字节数及压缩比例:
----------
DDL OPERATIONS
----------
Amount of redo written by DDL bulk load: <总字节> Byte, <速率> Byte/s
Amount of compressed redo written by DDL bulk load: <压缩后字节> Byte, original size: <原始字节> Byte
Compression ratio: 0.35通过SHOW GLOBAL STATUS查看
执行以下SQL语句查看压缩相关的状态变量,适合对接监控系统:
SHOW GLOBAL STATUS LIKE 'Innodb_ddl_bulk_load_write_redo%';状态变量 | 说明 |
| DDL Bulk Load写入Redo的累计字节数(开启压缩后为压缩后字节)。 |
| 压缩后的累计字节。 |
| 压缩前的原始累计字节。 |
实际压缩比 ≈ Innodb_ddl_bulk_load_write_redo_compressed / Innodb_ddl_bulk_load_write_redo_original,数值越小表示压缩效果越好。
最佳实践
从secondary模式起步:建议先开启
secondary模式观察压缩比与CPU开销,稳定后再按需升级到all模式。算法选择:无特殊需求时使用默认的
lz4算法即可,兼顾压缩率和性能。结合并行DDL使用:与innodb_polar_parallel_ddl_threads参数(控制每一个DDL操作的并行线程数)配合使用,可大幅提升DDL执行效率,并缓解并行DDL场景下的Redo带宽瓶颈。