更新时间:2024-09-11 GMT+08:00
分享

并行DDL

传统的DDL操作基于单核和传统硬盘设计,导致针对大表的DDL操作耗时较久,延迟过高。以创建二级索引为例,过高延迟的DDL操作会阻塞后续依赖新索引的DML查询操作。

云数据库 GaussDB(for MySQL)支持并行DDL的功能。当数据库硬件资源空闲时,您可以通过并行DDL功能加速DDL执行,避免阻塞后续相关的DML操作,缩短执行DDL操作的窗口期。

约束与限制

  • 内核版本为2.0.45.230900及以上版本支持使用该功能。
  • 并行创建索引功能,目前支持的索引为Btree二级索引。
  • 不支持主键索引、spatial index和fulltext index。如果一个并行创建索引的SQL语句包含主键索引,或者spatial index和fulltext index,客户端将会收到一个告警,提示该操作不支持并行创建索引,同时该语句会采用单线程创建索引的方式执行完成。假设在修改主键索引时,虽然指定了多线程,但是会收到一个告警,实际上只能通过单线程建索引。

开启并行DDL

表1 参数说明

参数名称

级别

描述

innodb_rds_parallel_index_creation_threads

Global,Session

  • 并行创建索引的线程数。
  • 如果值大于1,并行创建;否则,单线程创建。
  • 该值范围建议cpu核数的一半,同时不要超过innodb_rds_parallel_index_creation_threads_max,该值默认为8。

使用示例

  1. 假设使用sysbench的表,表内有1亿条数据。
    图1 查看表
  2. 在该表的“k”字段创建索引。
    图2所示,采用社区默认单线程创建索引,耗时146.82s。
    图2 单线程创建创建索引
  3. 通过设置innodb_rds_parallel_index_creation_threads= 4,启用4个线程创建索引。
    图3中可以看到创建索引耗时38.72s,与社区单线程相比速度提升了3.79倍。
    图3 多线程创建索引
  4. 假设要修改主键索引,虽然指定了多线程,但是会收到一个告警,实际上只能通过单线程建索引。
    图4 修改主键索引

相关文档