起因
昨天看了优快云推送的一篇《腾讯面试:一条SQL语句执行得很慢的原因有哪些?》
里面主要提到了
1.数据库在刷新脏页的时候会导致SQL很慢
2.锁的问题
3.sql本身的问题
下面主要对刷脏页理解,自己总结下
mysql 刷脏块的几种情况
1.redo日志切换
2.buffer pool不足
3.mysql 自己觉得空闲
4.mysql正常关机
上面的3,4两种情况可以忽略他们对性能的印象。
而 1,2两种情况都有可能会影响mysql整体的性能,其实两种情况的原因是一样的,刷脏页会占用大量的IO资源,会影响到你其他的sql。
第一种情况,redo写满了需要覆盖,覆盖前需要filush没有被写入磁盘的脏页,这种情况是要尽量的避免的,因为这种情况出现,整个系统会不在DML。在5.6之前可能还会阻塞查询。
第二中情况,内存不够了,需要为查询或者更新腾出对应的空闲页,这种情况很常见。
上面还会涉及很多的东西,比如检查点,LRU LIST,FLUSH LIST,FREE LIST .
影响
主要两个方面:
1.innodb_max_dirty_pages_pct
2.innodb_io_capacity
3.innodb_adaptive_flushing(不建议关闭)
InnoDB uses an algorithm to estimate the required rate of flushing, based on the speed of redo log generation and the current rate of flushing. The intent is to smooth overall