Welcome 微信登录

首页 / 数据库 / MySQL / MySQL Innodb日志机制深入分析

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一起说明,详细的实现机制如下:  如上图所示,Innodb的一条事务日志共经历4个阶段:l 创建阶段:事务创建一条日志;l 日志刷盘:日志写入到磁盘上的日志文件;l 数据刷盘:日志对应的脏页数据写入到磁盘上的数据文件;l 写CKP:日志被当作Checkpoint写入日志文件;  对应这4个阶段,系统记录了4个日志相关的信息,www.linuxidc.com用于其它各种处理使用:l Log sequence number(LSN1):当前系统LSN最大值,新的事务日志LSN将在此基础上生成(LSN1+新日志的大小);l Log flushed up to(LSN2):当前已经写入日志文件的LSN;l Oldest modified data log(LSN3):当前最旧的脏页数据对应的LSN,写Checkpoint的时候直接将此LSN写入到日志文件;l Last checkpoint at(LSN4):当前已经写入Checkpoint的LSN;  对于系统来说,以上4个LSN是递减的,即: LSN1>=LSN2>=LSN3>=LSN4. 具体的样例如下(使用show innodb status /G命令查看,Oldest modified data log没有显示):
  • 1
  • 2
  • 下一页
MySQL Innodb数据库性能实践——VARCHAR vs CHARLinux平台使用源码安装MySQL 5.1到个人目录简易指南相关资讯      MySQL基础教程 
  • MySQL基础教程:关于varchar(N)  (01月22日)
  • MySQL SELECT同时UPDATE同一张表  (02/19/2013 07:20:18)
  • Linux修改MySQL最大并发连接数  (02/15/2013 15:37:21)
  • 高性能MySQL(第3版) 中文PDF带目  (10/26/2014 10:03:50)
  • 如何在MySQL中的获取IP地址的网段  (02/18/2013 12:23:33)
  • C++和C#访问MySQL的简单代码示例  (12/21/2012 09:04:10)
本文评论 查看全部评论 (0)
表情: 姓名: 字数