欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!
在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
感谢你的关注!
先说一下这次 数据库性能抖动的现象 :当有数据进行更新、插入的时候,一般情况下可能几十毫秒就完成了,但是却出现了执行了几秒才完成的现象
造成这个问题的原因: 就是大量数据刷盘从而导致该 SQL 执行时间很长
我们知道,在 MySQL 中,对数据进行更新会先在 BufferPool 中更新,之后会将修改操作写入 redo log 日志文件中去
写 redo log 日志文件的过程就是,在 MySQL 的默认配置下,会有一个存储 redo log 的目录,里边有两个 redo log 磁盘日志文件,每个文件的大小为 48MB,那么当第一个 redo log 磁盘文件写满之后,会去写第二个 redo log 磁盘文件,当第二个 redo log 磁盘文件写满之后,又会去覆盖第一个 redo log 磁盘文件中的数据
那么当更新数据的时候,恰好碰到了第二个 redo log 磁盘文件写满的情况,此时会去覆盖第一个 redo log 磁盘文件中的数据,如果此时第一个 redo log 磁盘文件中有一些更新的数据还没有刷到磁盘中去的话,就会先将这部分数据页给刷到磁盘中去,如果这部分数据很多的话,就会导致花费比较长的时间
那么经过以上分析,性能抖动的原因找到了,如何解决呢?
解决思路就是:让 MySQL 尽量快地将数据从内存给刷到磁盘中去
让部署数据库机器的磁盘使用 SSD 固态硬盘,之后使用 fio 工具来对部署数据库的机器的 SSD 固态硬盘每秒钟最多能承载磁盘 IO 次数做一个测试,测试出来每秒最多的磁盘 IO 次数之后,可以将这个值设置给 MySQL 的参数:innodb_io_capacity,通过设置这个参数,可以让数据库以最大速率将缓存页刷到磁盘中去
可以使用 fio 工具来对部署数据库的机器的 SSD 固态硬盘每秒钟最多能承载磁盘 IO 次数做一个测试,测试出来每秒最多的磁盘 IO 次数之后,可以将这个值设置给 MySQL 的参数:innodb_io_capacity,尽可能让数据库以最大速率进行刷盘操作,