程序员

《MySQL技术内幕:InnoDB存储引擎》第二章 InnoDB

2019-02-20  本文已影响22人  半亩房顶

2.1 概述

2.2 InnoDB体系架构

InnoDB体系结构

多个内存块组成的内存池负责如下:

后台线程主要负责:

2.2.1

Oracle是多进程架构,核心后台进程有CKPT、DBWn、LGWR、ARCn、PMON、SMON等
而InnoDB不是,它是在master thread线程上实现了所有的功能。
默认情况下,InnoDB后台线程有7个,4个IO线程,一个master thread,一个锁监控线程,一个错误监控线程。
4个IO thread为 insert buffer thread,log thread,read thread,write thread,InnoDB Plugin版本后不再用innodb_file_io_threads参数控制read thread 和write thread数量,而是使用 innodb_read_io_thread和innodb_write_io_thread

使用此命令查看后台线程

show engine innodb status\G

2.2.2 内存

InnoDB由缓冲池(buffer pool)、重做日志缓冲池(redo log pool)、以及额外的内存池(additional memory pool),分别由innodb_buffer_pool_size、innodb_log_buffer_size 和 innodb_additional_mem_pool_size 的大小决定。

show variables like 'innodb_buffer_pool_size';
InnoDB存储引擎内存结构

2.3 master thread

2.3.1 master thread 源码分析

master thread 线程级别最高,其内部由主循环(loop),后台循环(background loop),刷新循环(flush loop),暂停循环(suspend loop),master thread根据数据库运行状态在这几个循环中切换,loop主要有两大部分,每秒操作,每10秒操作:

void master_thread(){
   loop;
   for(int i = 0;i < 10;i++){
      do thing once per second
      sleep 1 second if necessary
   }
   do things once per 10 second
   goto loop;
}

每秒一次操作包括:

每10秒一次操作包括:

然后是background loop,若当前没有用户活动,则进入此处

若是flush loop中也没有事儿,则转入 suspend loop,挂起master thread,等待事件

2.3.2 master thread 的潜在问题

2.4 关键特性

2.4.1插入缓冲(插入性能)

主键是行唯一的标识符,程序中插入记录顺序是按主键递增的,因此插入聚集索引一般是顺序的,不需要磁盘的随机读取。而非聚集索引的插入是离散的,B+树特性而至。
插入缓冲有两个条件

但是当程序执行大量的插入和更新操作,此时数据库又宕机,将会有大量的插入缓冲没有合并到实际的非聚集索引中,花费大量时间恢复。
辅助索引不能使唯一的,因为插入到插入缓冲时,我们并不去查找索引页的详情,吐过去查看了则又出现离散读,插入缓冲则失去意义。
插入缓存占用太多缓冲池内存时,调整IBUF_POOL_SIZE_PER_MAX_SIZE 即可

2.4.2 两次写 (可靠性)

InnoDB存储引擎doublewrite架构

脏页刷新时,先memcpy拷贝到内存中的doublewrite buffer中,然后通过doublewrite buffer分两次,每次1MB写入共享表空间的物理磁盘(doublewrite页连续,开销较小),然后将doublewrite buffer中的页写入表空间文件(此时为离散的,开销大)。如果写入磁盘过程中崩溃了,则可以从doublewrite页拷贝页的副本到表空间文件,再用重做日志进行恢复。skip_innodb_doublewrite可以禁止两次写功能

2.4.3 自适应哈希索引

2.5 启动、关闭与恢复

参数innodb_fast_shutdown 取值

参数 innodb_force_recovery 取值

2.6 InnoDB Plugin = 新版本的InnoDB存储引擎

mysql 5.1这个版本,采用了插件式的架构,这样,如有存储引擎的bug,无需再等待mysql的新版本了。
InnoDB新功能

欢迎关注个人公众号


半亩房顶
上一篇 下一篇

猜你喜欢

热点阅读