【MVCC与BufferPool缓存机制】

一、Redo与Undo 日志详解

概述:innodb读已提交、可重复读实现了mvcc

  • Undo日志用于  现实MVCC多版本并发控制机制

  • Redo日志是顺序写,效率比直接写数据库表文件要高。用于故障后恢复BufferPool

【Unodo日志版本链与Read View机制】

  • 一致性视图read-viw 

    1. 可重复读隔离级别开启后,查询sql会生成当前事务的一致性视图read-viw ,在事务结束前不会变化

    2. 读已提交,在每次执行查询sql时都会重新生成

 

二、Innodb引擎BufferPool缓存机制

个人理解:BufferPool缓存 ,可以理解为Mysql重写了磁盘缓存PageCache(一页4k) ,BufferPool加载mysql页 (一页16k),并用Mysql IO线程随机刷盘替代了 PageCache刷盘

事务修改表数据流程:

  1. 按页加载数据到BufferPool缓存

  2. 修改Undo日志

  3. 更新BufferPool内存数据

  4. Redo日志 , Redo Log Buffer  

  5. 事务commit,Redo日志写入磁盘  (宕机场景,Redo日志用于恢复BufferPool里的数据,BufferPool随机刷入磁盘)

  6. binlog (Server层日志,非引擎层)日志,所有存储引擎都要写binlog日志

  7. 写commit事务成功标记,Redo日志与binlog日志同步

  8. Mysql IO线程 ,随机以page为单位写入磁盘,也就是将BufferPool中 page刷到磁盘上

 

 

Mysql不建议使用查询缓存的原因:

因为查询缓存失效非常频繁,只要对一个表有更新,这个表上所有的查询缓存都会被清空

对于更新频繁的数据库来说,缓存命中率非常低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值