【MVCC与BufferPool缓存机制】

一、Redo与Undo 日志详解

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

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

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

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

  • 一致性视图read-viw 

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

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

【MVCC与BufferPool缓存机制】_第1张图片

 

二、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刷到磁盘上

【MVCC与BufferPool缓存机制】_第2张图片

 

 

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

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

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

你可能感兴趣的:(数据库,数据库,mysql)