MySQL“写缓冲“优化策略

本文探讨了MySQL中写缓冲的优化策略,包括缓存命中和不命中的处理,以及如何利用写缓冲池减少磁盘IO。同时指出,对于唯一性约束的索引,写缓冲可能无法避免磁盘IO,并提供了调整写缓冲池大小的建议。
摘要由CSDN通过智能技术生成

概要

前文讲过MySQL的缓冲池buffer-pool,我们知道缓冲池是用于加速数据访问速度的。那么当发生写操作时,也需要更新缓冲池中缓存的数据,这也是在任何缓存架构体系下需要实现的机制。

简单的更新缓存套路:

1、持久化数据
2、让缓存失效

  • 以上操作没有考虑缓存(Cache)和持久层(Repository)的整体事务的问题。
  • 如果你需要强一致性,你需要使用“两阶段提交协议”——prepare, commit/rollback,比如Java 7 的XAResource,还有MySQL 5.7的 XA Transaction,有些cache也支持XA,比如EhCache。
    当然,XA这样的强一致性的玩法会导致性能下降。

回到mysql中的实现:

缓存命中

1、先修改缓冲池中的页(内存)
2、顺序写入redo log (磁盘)

  • 当读取时,会命中缓冲池中的页,直接返回缓存数据
  • 当缓冲池数据通过LRU算法被淘汰时,“脏页”会被刷回磁盘
  • 当数据库崩溃(内存丢失),从redo log中恢复数据

内存页与磁盘数据不一致时,内存页也叫做“脏页”,mysql采用定期刷盘,降低磁盘IO,提升mysql性能。

缓存不命中

1、先从磁盘加载数据到缓冲池(磁盘io)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值