在InnoDB引擎中,允许有多个缓冲池实例,根据页的哈希值分配到不同的缓冲池实例中,从而减少数据库内部的资源竞争, 提升并发处理能力。 参数配置:
参数配置:
vi /etc/my.conf
后台线程模块
1). Master Thread
主要负责将缓冲池中的数据异步刷新到磁盘中, 保持数据的一致性, 还包括脏页的刷新、合并插入缓存、undo页的回收 。
2). IO Thread
在InnoDB存储引擎中大量使用了AIO来处理IO请求, 这样可以极大地提高数据库的性能,而IO Thread主要负责这些IO请求的回调。
Thread 线程数 参数配置read thread 4 innodb_read_io_threads
write thread 4 innodb_write_io_threads
insert buffer thread 1 -
log thread 1 -
3). Purge Thread
主要用于回收事务已经提交了的undo log,在事务提交之后,undo log可能不用了,就用它来回收。
4). Pager Cleaner Thread
新引入的一个用于协助 Master Thread 刷新脏页到磁盘的线程,它可以减轻 Master Thread 的工作压力,减少阻塞。
文件模块
1). frm文件
该文件是用来保存每个表的元数据信息的, 主要包含表结构定义 。
2). 系统表空间
系统表空间是InnoDB数据字典,二次写缓冲区,更改缓冲区和撤消日志的存储区 。系统表空间可以具有一个或多个数据文件, 默认情况下会在数据存放目录中创建一个名为 ibdata1 表空间数据文件。该文件名称可以通过参数 innodb_data_file_path 指定。
3). 独占表空间
innodb中设置了参数 innodb_file_per_table 为 1/ON,则会将存储的数据、索引等信息单独存储在一个独占表空间,因此也会产生一个独占表空间文件(ibd)
4). redo log
重做日志, 用于恢复提交事务修改的页操作 , 用来保证事务的原子性和持久性。主要是解决 提交的事务没有执行完成但是数据库崩溃了,当数据库恢复之后,可以完整的恢复数据。在执行操作时,InnoDB存储引擎会首先将重做日志信息放到这个缓冲区 redo log buffer,然后按照不同的策略和频率将buffer中的数据刷新到重做日志中。redo log在磁盘中保存的名称为 ib_logfile0,ib_logfile1。
5). bin log
二进制日志,其中记录表结构中的数据变更,包含DDL与DML。
6). 其他
错误日志、查询日志、慢查询日志等。
1). 表空间
表空间是InnoDB存储引擎逻辑结构的最高层, 大部分数据都存在于共享表空间ibdata1中。如果用户启用了参数 innodb_file_per_table ,则每张表都会有一个表空间(xxx.ibd),里面存放表中的数据、索引和插入缓存Bitmap页。其他的数据如undo log、插入缓存索引页、系统事务信息、二次写缓存都是在共享表空间中。
2). 段
表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB存储引擎是基于索引组织的,因此数据即是索引,索引即数据。数据段就是B+树的叶子节点, 索引段即为B+树的非叶子节点。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制。
3). 区
区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一个区中一共有64个连续的页。
4). 页
页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。