MYSQL系列4-刷脏

  1. Mysql的“垃圾回收”

Mysql有时候会发生长时间的没有响应,是不是类似与Java、Golang在进行垃圾回收?其实不然Mysql是使用C语言进行编写,没有垃圾回收机制。极大的可能是在进行“刷脏”操作。

  1. Mysql的脏页的产生

  • 更新数据时,只更新了内存中的数据页,并将redo log进行落盘,没有将数据页更新到磁盘,。

  • 内存中数据页与磁盘中的数据页不一致时,称为“脏页”。

  1. 什么是刷脏

  • 将内存数据页保存至磁盘。

  • 同时,删除与此页相关的redo log,推进check point。

  1. 为什么要刷脏

  • 内存中的脏页太多,内存不足。

  • redo log文件写满,需要推进check point。

  • 系统空闲,提前刷脏,预防上述情况。

  • Mysql关闭之前,保存数据。

  • 前两种(被迫刷脏)会产生性能问题,导致Mysql卡住。

  1. 如何避免被迫刷脏

  • 正确的告知InnoDB引擎,服务器的硬盘性能。

  • 服务器IO配置

  • 配置项:innodb_io_capacity。

  • 用来告知服务器的硬盘性能。

  • 可以通过fio命令进行测试。

  • 常见硬盘的IOPS:

  • 7200 rpm SATA(机械磁盘,7200转每分钟),70 IOPS(每秒70次IO)。

  • 10000 rpm FC(机械磁盘,10000转每分钟),125 IOPS(每秒125次IO)。

  • SSD SATA(固态硬盘),3000~40000 IOPS(固态硬盘每秒的IO差距较大,所以跨度较大)。

  • 配置合理的脏页比例上限。

  • 配置项:innodb_max_dirty_pages_pct。

  • 当脏页比例接近此值时,会加速刷脏页。

  • 建议保持默认值75%。

  • 控制“顺便”刷脏策略。

  • 配置项:innodb_flush_neighbors。

  • 传统磁盘连续写的性能最好,尽量刷连续的页。

  • SSD建议设置为0。(Mysql8.0已默认为0)

  1. 总结

  • 刷脏可能会大致Mysql卡住,造成性能问题。

  • 通过告知服务器IO性能,可以控制合理刷脏IO。

  • 合理的脏页比例上限,建议保持默认。

  • “顺便刷脏”功能需要在SSD硬盘下关闭。

来源:https://coding.imooc.com/learn/list/515.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值