针对提出的 MySQL IO 性能瓶颈问题,可以采用以下几种策略来尝试解决或缓解:
-
设置
binlog_group_commit_sync_delay
和binlog_group_commit_sync_no_delay_count
参数:binlog_group_commit_sync_delay
:这个参数允许二进制日志提交操作延迟一定时间(以微秒为单位),在此期间,多个事务可以被组合在一起并同时刷新到磁盘。binlog_group_commit_sync_no_delay_count
:该参数设置一个事务计数器,在达到指定的计数器值时,当前等待中的事务会被立即提交而不是继续等待。
这两个参数结合使用可减少 binlog 的写入次数,从而减轻磁盘 I/O 压力。但如你所述,可能会稍微增加事务响应时间,需要权衡 TPS(每秒事务处理量)和延迟之间的关系。
-
调整
sync_binlog
参数:sync_binlog=1
确保每个 binlog 事件写入磁盘后都会进行同步,这保证了数据的持久性但可能会导致 I/O 性能瓶颈。- 设置
sync_binlog
为大于 1 的值(例如 100 或 1000)可以减少磁盘 flush 操作的频率,从而提高性能,但这样做有丢失最近 binlog 日志的风险(比如在主机掉电的情况下)。
-
修改