MySQL 磁盘 I/O 次数过高时优化的办法
事务提交时,需要将 Redo Log 和 Binlog 持久化到磁盘中,可以通过四个参数,来控制刷盘时机,以降低磁盘 I/O 的频率。
组提交的两个参数
binlog_group_commit_sync_delay
:控制事务提交前的最大等待时间。binlog_group_commit_sync_no_delay_count
:控制组提交的事务数量,达到该值时,不用等待延迟时间,直接进行组提交。
sync_binlog
- 设置为 N,表示每次提交事务都只 write,事务数量达到 N 时再进行 fsync,但风险是,OS 崩溃时,会丢失所有只 write 的事务 Binlog 日志。
innodb_flush_log_at_trx_commit
- 设置为 2,表示事务提交时,只写到 Redo Log 文件中(OS 的 page cache 中),后由 OS 择机持久化到磁盘,风险同样是 OS 崩溃时,会丢失只在 page cache 中并未持久化到磁盘中的事务 Redo Log 日志。