MySQL读书笔记--InnoDB存储引擎

InnoDB存储引擎的特点是:

   行锁设计,支持MVCC,支持外键,提供一致性非锁定读,同时被设计成,最有效地利用及使用内存和CPU。

InnoDB体系架构包括:

   1.后台线程 

  (1)Master Thread,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。包括脏页的刷新,合并插入缓冲,UNDO页的回收。

    每秒一次操作包括:
          日志缓冲刷新到磁盘,即使这个事务还没有提交(总是)
          合并插入缓冲(可能)
          至多刷新100个脏页到磁盘(可能)
          如果当前没有用户活动,则切换到backgroup loop(可能)

    每10秒操作包括:
         刷新100个脏页到磁盘(可能)
         合并至多5个插入缓冲(总是)
         将日志缓冲刷新到磁盘(总是)
         删除无用的undo页(总是)
         刷新100个或者10个脏页到磁盘(总是)

 (2)I/O Thread,处理写IO请求, 线程包括 write, read, insert buffer, log IO Thread

 (3)Purge Thread 事务被提交后,其所使用的undolog可能不在需要,因此需要purge Thread 来回收已经使用并分配的undo页

 (4)Page Cleaner Thread,将之前版本中脏页的刷新操作都放入到单独的线程种完成。目的是减轻原有Master Thread的工作及对于用户查询线程阻塞

 2.InnoDB存储引擎内存池

 (1).缓冲池(innodb_buffer_pool_size),缓冲池的设计目的是为了协调CPU速度与磁盘速度的鸿沟,记录按页的方式进行管理。对于数据库中页的修改操作,首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上,页从缓冲池刷新回磁盘的操作并不是在每次页发生更新是触发,而是一种通过称之为Checkpoint的机制刷新回到磁盘。

  (2)缓冲池缓存的数据页类型有:索引页,数据页,undo页,插入缓冲,自适应哈希索引,InnoDB存储的锁信息,数据字典信息

  (3)InnoDB1.0x版本开始,允许有多个缓冲池实例,每个页根据哈希值平均分配到不同缓冲池实例中。这样做的好处是减少数据库内部的资源竞争,增加数据库并发能力(innodb_buffer_pool_instance)

  (4)LRU List, Free List, Flush List
   LRU List:最频繁使用的页在LRU列表的前端。最少使用的页在LRU列表的末端。
   Free List :当数据库刚启动时,LRU列表是空的,及没有任何的页,这时页都存放到Free列表。当需要从缓冲池中分页时,首先从Free列中查找是否有可用的空闲页,若有则将该页从Free中删除,放入到LRU列表中。否则根据LRU算法,淘汰LRU列表末尾的页

   Flush List:脏页列表(update/delete/insert)


  (5)重做日志缓冲 

    Master Thread 每秒将重做日志缓冲刷新到重做日志文件中
    每个事务提交时会将重做日志缓冲刷新到重做日志文件
    当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件

 3.文件

   包括表空间文件(ibdata1)、表名.ibd、redo日志文件及各种日志文件

 Checkpoint 技术


   (1)作用:缩短数据库的恢复时间,缓冲池不够用时,将脏页刷新到磁盘,重做日志不可用时,刷新脏页

   (2)当数据发生宕机时,数据库不需要重做所有的日志,因为Checkpoint之前的页都已经刷新回到磁盘。故数据库只需要对checkpoint后的重做日志进行恢复,这样缩短恢复时间。
  
   (3)当缓冲池不够用的时候,根据LRU算法溢出最近最少使用的页,若此页为脏页,需要强制执行Checkpoint

   (4)重做日志的设计都是循环使用的。并不是无限增大,当覆盖重做日志时,如果被覆盖的重做日志还需要使用,那么必须强制产生Checkpoint,将缓冲池中的页至少刷新到当前重做日志的位置

   (5)对InnoDB而言,通过LSN(长序列号)来标记,即LSN之前不需要刷新到磁盘,LSN之后的时需要刷新到磁盘的

   (6)Checkpoint触发条件
     Sharp Checkpoint: 数据库关闭时将所有脏页都刷新回磁盘
     Fuzzy Checkpoint: 部分脏页刷新
     Master Thread Checkpoint
     FLUSH_LRU_LIST Checkpoint
     Async/Sync Flush Checkpoint
     Dirty Page too much Checkpoint

猜你喜欢

转载自blog.csdn.net/H_L_S/article/details/89051567
今日推荐