美文网首页
7:Innodb引擎SQL执行的BufferPool缓存机制

7:Innodb引擎SQL执行的BufferPool缓存机制

作者: _River_ | 来源:发表于2021-04-27 09:20 被阅读0次
1:undo_log redo_log binlog (先了解)
1:如果是提交失败可以通过undo日志里面的数据恢复 BufferPool里面的缓存数据
2:如果事务提交成功 buffer pook里的数据还没来得及写入磁盘  此时系统宕机了
    可以使用redo日志里面的数据恢复 buffer pool 里面的缓存数据
3:binlog主要是用来恢复数据库磁盘里的数据    
2:执行器
原值HSJ
将要修改的值 hesuijin

执行sql:
update tableName set name = 'hesujin' where id =1

1:从磁盘文件 加载到 缓存池(Buffer Pool)(里面是LRU算法 Least Recently Used)

    加载缓存数据:
    加载id为1的记录所在的整页数据
     
    旧数据HSJ 加载到 缓存

2:写入更新数据的旧值从缓存中加载数据到undo日志(InnoDB独有)中

    旧数据HSJ 加载到  undo日志文件

3:更新缓存数据
   
   把旧数据HSJ 改成 新数据 hesuijin

4:写入Redo_Log Buffer (缓冲机制)
   
   缓存机制存放 新数据hesuijin   后面批量的去写入磁盘             

5:redo_log日志(InnoDB独有)写入磁盘

    新数据 hesuijin写入到磁盘中
    
    该redo_log的事务  prepare阶段  准备提交事务(二段提交 第一阶段)

6:bin_log日志(属于Server层  Myisam与InnoDB都有)写入磁盘

    新数据 hesuijin写入到磁盘中

7:进行bin_log 与 redo_log 事务提交阶段
    bin_log提交事务
    写入commit标记 到 redo_bin日志文件里面  
    该redo_log的事务 处于commit(二段提交 第二阶段)         
    该标志保证事务提交后 redo 与binlog 数据一致

8:最终写入新数据真正写入磁盘

    1:提交事务成功后 
    2:Buffer Pool 的新数据  进入 IO 线程
    3:IO线程 随机写入磁盘(随机刷盘)
        (注意之前是读出一页的数据 这里面也是写入一页的数据)
    4:刷盘完成 磁盘中的数据才真正变成  新数据 hesuijin     
3:问题
问题1:为什么一定要保证 bin_log和redo_log 必须写完后   再进行提交事务?
        因为提交事务就已经认为数据库的数据已经进行了修改。
        redo_log日志文件:提交事务之后还没刷盘 在数据库重启之后会,redo_log日志文件恢复
        bin_log日志文章:是需要保障数据恢复的  不可以缺少任何一条写记录的日志   

问题2:如果事务提交失败,会如何处理
         特别注意:实际上事务真正意义上的提交是指:redo_log 和 bin_log的日志一起提交            
         1:redo_log 与 bin_log 也会进行回滚
         2:会使用undo_log 来恢复Buffer Pool缓存池的数据      
         3:磁盘中的真正的数据还没继续修改  不需要处理
4:Mysql要设置这么一套复杂的机制来执行SQL了?
效率问题:内存肯定比硬盘快
数据库的增删改查都是直接操作Buffer Pool的,Buffer Pool一般设置为机器内存的60%左右

但日志文件也是写到磁盘里面的如何解释?

真正的答案是:磁盘的随机读写性能非常差 但磁盘顺序读写非常快   (相差2到3个数量级)

磁盘顺序IO的速度几乎可以与内存速度媲美

redo_log是环型刷新   bin_log是文件追加   而mysql磁盘数据文件不一定连贯

Msql存储数据的磁盘文件是在磁盘中随机读写

而redo_log 和 bin_log 是在磁盘中顺序读写

Mysql这套机制看起来复杂,但它可以保证每个更新请求都是更新内存BufferPool,
然后顺序写日志文件,同时还能保证各种异常情况下的数据一致性。

更新内存的性能是极高的,然后顺序写磁盘上的日志文件的性能也是非常高的,要远高于随机读写磁盘文件。
正是通过这套机制,才能让我们的MySQL数据库在较高配置的机器上每秒可以抗下几干的读写请求。

相关文章

  • 7:Innodb引擎SQL执行的BufferPool缓存机制

    1:undo_log redo_log binlog (先了解) 2:执行器 3:问题 4:Mysql要设置这么...

  • Mysql性能调优

    SQL执行原理详解 连接器详解 分析器详解 优化器详解 执行器详解 Innodb的Buffer Pool机制详解 ...

  • MySQL两种引擎的区别

    Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提...

  • MySQL两种引擎的区别

    Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提...

  • mysql索引区别innodb和MyISAM

    Innodb引擎概述 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎...

  • MYSQL实战优化——InnoDB存储引擎介绍

    InnoDB存储引擎介绍 InnoDB的重要内存结构:缓冲池首先假设我们有一条SQL语句是这样的: InnoDB存...

  • Mqsql引擎

    1、Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。 该引...

  • 数据库引擎

    Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库...

  • Mysql 查询优化

    1、为查询缓存优化 SQL 语句 Mysql数据库引擎提供的查询缓存功能可以有效提高性能。当很多相同的查询执行多次...

  • 6.MySQL架构详解

    目录:1.MySQL架构详解2.MyISAM和InnoDB的比较3.SQL查询语句执行路径4.优化查询缓存 1.M...

网友评论

      本文标题:7:Innodb引擎SQL执行的BufferPool缓存机制

      本文链接:https://www.haomeiwen.com/subject/zfayrltx.html