起因
昨天看了CSDN推送的一篇《腾讯面试:一条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 estima