mysql性能莫名抖动

第一个,可能buffer pool的缓存页都满了,此时你执行一个SQL查询很多数据,一下子要把很多缓存页flush到磁盘上去,刷磁盘太慢了,就会导致你的查询语句执行的很慢。

因为你必须等很多缓存页都flush到磁盘了,你才能执行查询从磁盘把你需要的数据页加载到buffer pool的缓存页里来。

第二个,可能你执行更新语句的时候,redo log在磁盘上的所有文件都写满了,此时需要回到第一个redo log文件覆盖写,覆盖写的时候可能就涉及到第一个redo log文件里有很多redo log日志对应的更新操作改动了缓存页,那些缓存页还没flush到磁盘,此时就必须把那些缓存页flush到磁盘,才能执行后续的更新语句,那你这么一等待,必然会导致更新执行的很慢了。

所以上述两个场景导致的大量缓存页flush到磁盘,就会导致莫名其妙的SQL语句性能抖动了

那今天我们来说说怎么尽可能优化MySQL的一些参数,减少这种缓存页flush到磁盘带来的性能抖动问题。

其实大家可以想一下,如果要尽量避免缓存页flush到磁盘可能带来的性能抖动问题,那么核心的就两点

第一个是尽量减少缓存页flush到磁盘的频率,第二个是尽量提升缓存页flush到磁盘的速度。

那你想要减少缓存页flush到磁盘的频率,这个是很困难的,因为平时你的缓存页就是正常的在被使用,迟早会被填满,一旦填满,必然你执行下一个SQL会导致一批缓存页flush到磁盘,这个很难控制,除非你给你的数据库采用大内存机器,给buffer pool分配的内存空间大一些,那么他缓存页填满的速率低一些,flush磁盘的频率也会比较低。

所以今天我们主要是给讲解第二个问题的优化,

猜你喜欢

转载自blog.csdn.net/itlijinping_zhang/article/details/119242663