InnoDB是事务安全的MySQL存储引擎,野山谷OLTP应用中核心表的首选存储引擎。他是基于表的存储引擎,而不是基于数据库的。其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效的利用一是使用内存和CPU。

  InnoDB存储引擎由HeIkki Tuuri(1964年,芬兰赫尔辛基)。

后台线程:

  Master Thread:核心:异步刷新、一致性;

  IO Thread:AIO 请求回调处理;

  Purge Thread:回收已分配的undo页;

  Page Cleaner Thread:脏页刷新。

内存缓冲池:

  首先将从磁盘督导的页放在缓冲池中,这个过程称为将页“FIX”在缓冲池。下次访问时,若在缓冲池中,则该页被命中;若不在缓冲池中,读取磁盘上的页。修改操作,首先修改缓冲池中的页,然后再以一定的频率刷新到磁盘。通过show variables like 'innodb_buffer_pool_size'\G;查看缓冲池大小。

  具体的说缓冲池中缓存的数据页类型有:索引页、数据页、undo页、茶如缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、InnoDB存储的锁信息(lock info)、数据字典信息(data dictionary)等。注意区别与MyISAM存储引擎。

LRU List——Latest Recent Used(最近最少使用)

  默认大小页的大小16KB,通过show engine innodb status;可以查看当前缓冲池的页数。InnoDB对传统的LRU算法进行了优化。在InnoDB中加入了midpoint。传统的LRU算法当访问到的页不在缓冲区是直接将磁盘页数据调到缓冲区队列;而InnoDB并不是直接插入到缓冲区队列的队头,而是插入LRU列表的midpoint位置。这个算法称之为midpoint insertion stategy。默认配置插入到列表长度的5/8处。midpoint由参数innodb_old_blocks_pct控制。

  midpoint之前的列表称之为new列表,之后的列表称之为old列表。可以简单的将new列表中的页理解为最为活跃的热点数据

  好处:不使用朴素的LRU算法。出于效率考虑,因为可能存在类似于“扫表”等偶然操作,这样做可以避免将热点数据替换掉,而添加到缓冲区的页是偶然操作用到的页。

  然而mid位置的页不是永久的。为了解决这个问题,InnoDB存储引擎引入了innodb_old_blocks_time来表示页读取到mid位置之后需要等待多久才会被加入到LRU列表的热端。可以通过设置该参数保证热点数据不轻易被刷出。

Free List

  数据库刚启动的时候,LRU 列表为空,此时需要用到的时候直接将Free列表中的页删除,在LRU列表中增加相应的页,维持页数守恒。

Flush List  

  当LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页数据产生了不一致。这时候数据库会通过checkpoint机制将脏页刷新回磁盘,而Flush 列表中的页即为脏页列表。注意脏页也存在于LRU列表中。 

最新文章

  1. phpcms 服务器安全认证错误
  2. Hadoop总结篇之五---模块间是怎么驱动执行的
  3. 大批量GPS坐标转百度坐标
  4. 关于HIVE的数据模型介绍
  5. 图片来自腾讯,未经授权不可引用,js解决方法
  6. PHP开发者常犯的10个MySQL错误
  7. row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
  8. Redis 3.0.2集群搭建以及相关问题汇总
  9. spring的xml的property和constructor-arg的解析
  10. COJ WZJ的数据结构(负十八)splay_tree的天堂
  11. openwrt 包makefile
  12. CPP笔记_泛型编程简单总结
  13. Audio Unit 基础
  14. Algorithm --> 字符串中最长不重合子串长度
  15. python epoll方式tcp连接回发消息
  16. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页
  17. vue从入门到进阶:指令与事件(二)
  18. 2016vijos 6-1 松鼠聚会(LCA+卡空间)
  19. P1350 车的放置
  20. Linux 的软件安装目录

热门文章

  1. android属性动画之ValueAnimator
  2. VLine[-1]=VLine[width]=128 数组的负一地址代表啥
  3. hibernate Session一级缓存 应该注意的地方
  4. chrome远程调试按inspect后出现的界面为空白,应如何解决?
  5. ROS导航之地图costmap_2d与bresenham算法
  6. iOS --转载2018苹果$299美元企业级开发者账号申请攻略
  7. 关于java类加载器的一些概念
  8. poj3177Redundant Paths tarjan缩点
  9. GUN C中的流
  10. oracle 创建表并添加注释