MariaDB调整innodb_io_capacity时是否需要关闭innodb_flush_sync?
结论
你的场景下不需要关闭innodb_flush_sync,该参数的开关和innodb_io_capacity的调优没有强制绑定关系,保持默认开启即可。
核心原因说明
- 先明确两个参数的作用边界,二者不存在互斥的配置要求:
innodb_io_capacity:用于限制InnoDB后台异步刷脏页、合并插入缓冲等常规后台IO操作的每秒IO上限,你将其从默认的200(适配机械硬盘)调整到15000完全匹配两块NVMe硬盘的IO性能,属于合理的性能调优操作innodb_flush_sync:仅在检查点操作触发、缓冲池脏页堆积超过安全阈值时才会生效:开启状态下会临时突破innodb_io_capacity的限制,尽可能快地把所有待刷脏页落盘,避免缓冲池脏页占比过高拖慢正常业务写入
- 高IOPS的NVMe硬件完全适配该参数的开启逻辑:NVMe硬盘通常可支持数万甚至十万级的随机写入IOPS,开启
innodb_flush_sync可以在业务突发写入、脏页快速堆积的场景下,充分利用硬盘性能快速清理脏页,反而能减少业务侧的写入抖动。只有IO性能极低的老式SATA机械硬盘场景才会建议关闭该参数,避免同步刷写占满仅有的数百IOPS导致业务请求阻塞,你的场景完全不存在这个问题 - 你的运行环境已经兼容该参数的默认配置:FreeBSD 13对NVMe设备的IO调度、异步IO接口的适配已经非常成熟,MariaDB 10.5针对FreeBSD平台的InnoDB刷写逻辑也做过专项优化,不会出现开启
innodb_flush_sync后IO异常阻塞的问题
配套调优建议
- 调整
innodb_io_capacity为15000的同时,建议同步把innodb_io_capacity_max调整到30000~40000,给突发IO场景留足够的性能缓冲区 - 调优完成后可以通过
show global status like 'Innodb_buffer_pool_pages_dirty'观察脏页波动情况,如果峰值持续超过缓冲池总页数的10%,可以再适当调高innodb_io_capacity的数值
内容的提问来源于stack exchange,提问作者Andreas Gerd
相关产品推荐
相关产品推荐

