Java进阶专题(二十六) 数据库原理研究与优化 (4)

Java进阶专题(二十六) 数据库原理研究与优化

在InnoDB引擎中,允许有多个缓冲池实例,根据页的哈希值分配到不同的缓冲池实例中,从而减少数据库内部的资源竞争, 提升并发处理能力。 参数配置:

Java进阶专题(二十六) 数据库原理研究与优化

参数配置:
vi /etc/my.conf

innodb_buffer_pool_size=268435456

后台线程模块

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). 其他
错误日志、查询日志、慢查询日志等。

InnoDB逻辑存储结构

Java进阶专题(二十六) 数据库原理研究与优化

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 个区。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypypd.html