我们在使用mysql的时,有时候会突然卡一下,仿佛是我们在用GO语言时的垃圾回收。实际上,mysql是用C写的,没有垃圾回收机制。那为什么无故卡一下?
你会发现此时磁盘IO很高,说明mysql正在”刷脏页“。
刷脏页就是将内存中的数据页保存至磁盘,同时,删除此页相关的redo log,推进check point。
为什么要刷脏?
1,内存中脏页太多,内存不足。
2,redo log 文件写满,想要推进check point
3,系统空闲,提前刷脏,预防上诉情况
4,mysql关闭前,保存数据
前两种都会产生性能问题,导致mysql卡住。
如何避免被迫刷脏?
1. 配置合理的脏页比例上限
2 控制“顺便刷脏”策略:传统磁盘连续读写性能好,尽量刷连续的页
为啥只查一行的语句,也执行这么慢?
第一MySQL数据库本身被堵住了,比如:系统或网络资源不够
第二SQL语句被堵住了,比如:表锁,行锁等,导致存储引擎不执行对应的SQL语句
第三确实是索引使用不当,没有走索引
第四是表中数据的特点导致的,走了索引,但回表次数