生产实践(二)
原创大约 1 分钟
性能抖动
在了解Buffer pool
、redo log
、LRU/flush
、undo log
、ReadView
、MVCC
、行锁
、表锁
等机制后,需要通过案例来说明问题了。
性能抖动的根本原因可能有两点。
buffer pool
缓存页已满,当遇到大批量查询时,瞬间要把大量缓存页刷入磁盘,导致执行阻塞。redo log
被磁盘文件写满,且等待flush
操作,无法处理任何新的请求,必须等刷完磁盘才能继续执行。
通过优化MySQL参数可以减少缓存页带来的性能抖动现象。
尽量减少缓存页
flush
刷入磁盘的频率,但这个几乎很难优化。尽量提高缓存页
flush
刷入磁盘的速度。采用
SSD
固态硬盘。通过
fio
工具测试SSD
性能,调整innodb_io_capacity
和SSD写入速率一致。脏页会默认按照
innodb_io_capacity × 75%
的比例刷磁盘。innodb_flush_neighbors
是是否把相邻的缓存页也刷到磁盘,一般设置为0,禁止刷临近缓存页。
感谢支持
更多内容,请移步《超级个体》。