ibdata写盘原理
来源:互联网 发布:c语言布尔类型变量 编辑:程序博客网 时间:2024/06/06 16:41
MySQL数据库InnoDB存储引擎 Buffer Pool Flush List详解
Buffer Pool Flush List
add page to flush list
buffer pool中的page,有三种状态:
free: 当前page未被使用
clean: 当前page被使用,对应于数据文件中的一个页面,但是页面未被修改
dirty: 当前page被使用,对应于数据文件中的一个页面,同时页面被修改
free类型的page,一定位于buf pool的free链表中。
clean,dirty两种类型的page,一定位于buf pool的LRU链表中。
与此同时,dirty page还位于buf pool的flush链表中。flush list中的dirty page,按照page的oldest_modificattion时间排序,oldest_modification越大,说明page修改的时间越晚,就排在flush 链表的头部;oldest_modification越小,说明page修改的时间越早,就排在flush链表的尾部。当InnoDB进行flush list的flush操作时,从flush list链表的尾部开始,写出足够数量的dirty pages,推进Checkpoint点,保证系统的恢复时间。
那么,dirty page是在什么时候进入flush list的呢?看过我以前文档的同学,一定知道InnoDB存储引擎有一个所谓的mini-transaction,页面访问/修改都被封装为一个mini-transaction,当mini-transactin提交的时候,也就是该mini-transaction修改的页面进入flsuh list的时候。
mtr_commit -> mtr_memo_note_modification();
// 若当前page已经是dirty page,不是第一次修改,那么说明当前page已经在
// flush list之中,因此不需要再次加入flush list
if (block->page.oldest_modification)
ut_ad(block->page.oldest_modification <= mtr_start_lsn);
else
// 若当前page是第一次修改,oldest_modification = 0,则将page加入flush list
buf_flush_insert_into_flush_list();
buf_flush_list_mutex_enter(buf_pool);
remove page from flush list
有两种操作,可以将dirty page从flush list中移除。一是LRU list flush;二是Flush list flush。其中,LRU list flush已经在前面的章节中分析。
而Flush list flush,也就是我们通常所说的InnoDB fuzzy Checkpoint,可以参考我以前的一个文档:MySQL InnoDB Insert Buffer Checkpoint AIO实现分析 。
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-10/91715p2.htm
推荐阅读:
InnoDB存储引擎的启动、关闭与恢复 http://www.linuxidc.com/Linux/2013-06/86415.htm
MySQL InnoDB独立表空间的配置 http://www.linuxidc.com/Linux/2013-06/85760.htm
MySQL Server 层和 InnoDB 引擎层 体系结构图 http://www.linuxidc.com/Linux/2013-05/84406.htm
InnoDB 死锁案例解析 http://www.linuxidc.com/Linux/2013-10/91713.htm
- ibdata写盘原理
- MYSQL IBDATA
- “.ibd”文件和ibdata 文件
- MySQL ibdata多路径扩容
- 怎么写原理文档
- 写时复制原理分析
- 单片机的烧写原理
- 单片机的烧写原理
- 写时拷贝原理分析
- HTML+CSS写三角形原理
- MySQL: ibdata files do not shrink on database deletion [innodb]
- Linux 下 Mysql 优化ibdata,初始化mysql数据库
- mysql Innodb的ibdata的作用与分离
- mysql innodb ibdata 数据文件误删除恢复过程
- 人工误删除innodb ibdata数据文件,如何恢复
- Windows编程原理及自己动手写计算器
- 自己写的 container_of & offset_of 的原理
- 写有效率的SQL查询 (底层原理)
- 基于XML配置的Sping AOP详解
- 为 Sublime Text 3 设置 Python 的全栈开发环境
- Nginx初探
- Hibernate 注册登录,对数据库实现增删改查,及根据用户名来查询数据库
- RequestDispatcher的forward与include方法的区别
- ibdata写盘原理
- 学习mac开发第九弹 10分钟学会数据库简单操作
- string库之模拟实现strspn、strcspn与strpbrk
- 面向对象继承,覆盖
- 快速排序
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
- 使用hibernate序列号对象到数据库中出现 ids for this class must be manually assigned before calling save()
- .NET世界的包管理器——Nuge
- MyEclipse版本号生成