zoukankan      html  css  js  c++  java
  • redo在ACID中作用,及一些概念

    以下涉及文件在mysql配置的data数据目录下

    1. redo log概念: 重做日志

      ib_logfile0 和 ib_logfile1 两个文件默认50M,用于存储redo log日志,轮询使用的,0满了用1, 1满了重用0;

      redo log的两个文件用于记录数据的变更,即脏页数据是如何变化而来的。首先是记录在redo log buffer中,在写回到redo文件中。

    2. redo log buffer 概念:即redo内存缓冲区域。

    3. data buffer poll 概念: 数据和索引缓冲池,即ibd文件的缓冲池。(脏页就发生在这里,redo log buffer中记录的也是这里的变化)

    4. LSN概念: log sequence number日志序列号 

      LSN号存在于每个page中(构成ibd的单元,16kb大小,连续的64个构成区),redo log有关的两个文件中也有,

      redo log buffer中也有, data buffer poll中也有.

    5. mysql每次重启, 必须比对ibd中page和redo log有关的两个文件中保存的LSN号,必须要求两者一致(能恢复一致), 才能正常启动。

      即要求ibd文件和ib_logfile0/1文件中的必须一致(或能恢复一致)。不一致时触发CSR机制

    10. WAL概念:write ahead log日志优先写。

      日志优先于数据写入磁盘的,持久化的机制。

    11. 脏页:

      内存脏页,内存中数据改变了,没写入磁盘之前,我们把内存页称之为脏页。

    12. CKPT概念: checkpoint(检查点), 就是将脏页写到磁盘的动作。

    13. TXID概念: 事务号,innodb会为每个事务生成一个事务号,伴随着整个事务的生命周期。

    14. CSR机制概念:

      mysql数据库在重启时会校验ibd文件和ib_logfile0/1文件中保存的LSN日志序列号, 如果logfile中的版本优于ibd记录的版本,则会:

      1. 加载ibd数据到data buffer poll中,加载ib_logfile0/1中记录的变更日志到redo log buffer中,使用日志重新构造出脏页数据

        并立即触发CKPT机制, 将构造出的脏页数据写会到磁盘中,同时会同步LSN日志序列号保持和ib_logfile0/1一致。

    总结:

      redo log , redo log buffer, ibd, data buffer poll在一个事务中都干了什么?

      1. 把事务中涉及到的数据行所在ibd page页整个16kb大小的内容及LSN号加载到data buffer poll中

      2. 修改data buffer poll中的数据及LSN号累加1.

      3. redo log buffer缓冲区中会记录data buffer poll中的数据变化日志及LSN号

      4. commit递交时,mysql的WAL机制使日志优先于数据写入磁盘(即redo log中,带LSN号),并返回事务成功提示。

      如果此时突然宕机,我们重启数据库时这四个又会发生什么变化?

      1. 数据库重启时会对比ibd中LSN号和redo log中记录的LSN号,如果不一致会触发CSR机制,如下:

        加载redo log中日志信息到redo log buffer中, 加载ibd数据到data buffer poll中,使用redo log buffer中的日志信息

        在data buffer poll中构造出脏页信息,并立即触发CKPT机制,把脏页数据及LSN号写回到磁盘(ibd文件中)。

      2. 此时重新检查ibd和ib_logfile0/1中的LSN号是否一致, 一致则数据库启动成功,不一致则失败。

        

  • 相关阅读:
    Windows开启telnet服务 + 连接失败处理
    注册表比较工具
    wmic命令
    python netifaces模块
    【转】wireshark基本用法及过虑规则
    设置Intel网卡以抓取报文的vlan tag
    【转】 中兴OLT-C300常用命令
    Iris分类以及数组reshape想到的
    关于plot画图的原理
    Python的rand vs randn以及linspace
  • 原文地址:https://www.cnblogs.com/quzq/p/12839958.html
Copyright © 2011-2022 走看看