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号是否一致, 一致则数据库启动成功,不一致则失败。

        

  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/quzq/p/12839958.html
Copyright © 2011-2022 走看看