美文网首页
Innodb日志机制

Innodb日志机制

作者: 从此启航 | 来源:发表于2017-08-03 00:09 被阅读0次

1.1. Log & Checkpoint
Innodb的事务日志是指Redo log,简称Log,保存在日志文件ib_logfile里面。Innodb还有另外一个日志Undo log,但Undo log是存放在共享表空间里面的(ibdata文件)。

由于Log和Checkpoint紧密相关,因此将这两部分合在一起分析。
名词解释:LSN,日志序列号,Innodb的日志序列号是一个64位的整型。

1.1.1. 写入机制
1.1.1.1. Log写入

LSN实际上对应日志文件的偏移量,新的LSN=旧的LSN + 写入的日志大小。举例如下:
LSN=1G,日志文件大小总共为600M,本次写入512字节,则实际写入操作为:
l 求出偏移量:由于LSN数值远大于日志文件大小,因此通过取余方式,得到偏移量为400M;
l 写入日志:找到偏移400M的位置,写入512字节日志内容,下一个事务的LSN就是1000000512;

1.1.1.2. Checkpoint写入

Innodb实现了Fuzzy Checkpoint的机制,每次取到最老的脏页,然后确保此脏页对应的LSN之前的LSN都已经写入日志文件,再将此脏页的LSN作为Checkpoint点记录到日志文件,意思就是“此LSN之前的LSN对应的日志和数据都已经写入磁盘文件”。恢复数据文件的时候,Innodb扫描日志文件,当发现LSN小于Checkpoint对应的LSN,就认为恢复已经完成。
Checkpoint写入的位置在日志文件开头固定的偏移量处,即每次写Checkpoint都覆盖之前的Checkpoint信息。

1.1.2. 管理机制

由于Checkpoint和日志紧密相关,将日志和Checkpoint一起说明,详细的实现机制如下:

Paste_Image.png

当事务执行速度大于脏页刷盘速度时,Ckp age和Buf age会逐步增长,当达到async点的时候,强制进行脏页刷盘或者写Checkpoint,如果这样做还是赶不上事务执行的速度,则为了避免数据丢失,到达sync点的时候,会阻塞其它所有的事务,专门进行脏页刷盘或者写Checkpoint。

因此从理论上来说,只要事务执行速度大于脏页刷盘速度,最终都会触发日志保护机制,进而将事务阻塞,导致MySQL操作挂起。

由于写Checkpoint本身的操作相比写脏页要简单,耗费时间也要少得多,且Ckp sync点在Buf sync点之后,因此绝大部分的阻塞都是阻塞在了Buf sync点,这也是当事务阻塞的时候,IO很高的原因,因为这个时候在不断的刷脏页数据到磁盘。例如如下截图的日志显示了很多事务阻塞在了Buf sync点:


附注:Innodb的日志保护机制实现可以参考log0log.c文件的void log_check_margins(v

相关文章

  • Innodb日志机制

    1.1. Log & CheckpointInnodb的事务日志是指Redo log,简称Log,保存在日志文件...

  • MySql 复制

    MySQL 日志格式分为2种 服务层日志二进制日志慢查询通用日志 存储引擎日志innodb 重做日志innodb ...

  • Mysql InnoDB中的文件

    InnoDB中的文件 InnoDB文件分类 参数文件:调节mysql这台机器的 日志文件:记录各种日志 socke...

  • mysql日志

    1.Redo日志—innodb存储引擎的日志文件 当发生数据修改的时候,innodb引擎会先将记录写到redo l...

  • mysql binlog日志与redo log

    mysql日志含有server层的binlog日志(逻辑归档日志),在innodb存储引擎下的redo log日志...

  • innodb_flush_log_at_trx_commit

    1,参数解释:innodb_flush_log_at_trx_commit是将事务日志从innodb log bu...

  • Innodb加锁信息查看

    Innodb加锁分析时,需要查看当前加锁情况 使用命令行 开启NNODB监控机制(InnoDB Monitors)...

  • MySQL redo log和undo log 原理

    MySQL的日志有很多种,如二进制日志(binlog)、错误日志、查询日志、慢查询日志等,此外InnoDB存储引擎...

  • MySQL日志系统:redo log与binlog

    日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日...

  • Innodb锁机制

    InnoDB实现了两种类型的行锁。 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。 排...

网友评论

      本文标题:Innodb日志机制

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