InnoDB体系构架

在InnoDB存储引擎的架构中,有多个内存块,这些内存块组成一个内存池。InnoDB存储引擎体系架构如下图所示:

后台线程

后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,另外,将已修改的数据文件刷新到磁盘文件,同时,保证在数据库发生异常的情况下,InnoDB能恢复到正常运行状态。InnoDB是多线程模型,不同的线程用于处理不同的任务。

Master Thread

Master Thread是核心后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,包括脏页的刷新,合并插入缓冲(insert buffer),undo页的回收等。

IO Thread

IO Thread负责IO请求的回调。主要有read, write, insert buffer和log IO Thread。其中read thread和write thread分别使用innodb_read_io_threadsinnodb_write_io_threads参数进行设置。可以通过命令show engine innodb status来查看InnoDB中的IO Thread:

I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)

可以看到IO Thread 0为insert buffer thread,IO Thread 1为log thread。之后根据参数innodb_read_io_threadsinnodb_write_io_threads来设置读写线程,并且读线程ID总是小于写线程。

Purge Thread

事务被提交后,其所使用的undolog可能不再需要,Purge Thread负责回收undo页。在InnoDB1.1版本之前,purge操作仅在Master Thread中完成。InnoDB1.1开始,purge操作可以独立在Purge Thread中进行。通过如下配置来启用独立的Purge Thread:

innodb_purge_threads=1

InnoDB1.2版本开始支持多个Purge Thread,加快undo页的回收。由于是离散地读取undo页,也能更进一步利用磁盘的随机读取性能。

Page Cleaner Thread

InnoDB1.2版本引入了Page Cleaner Thread。作用是将脏页刷新操作都放到单独的线程中来完成,从而减轻Master Thread的工作。

InnoDB缓冲池

InnoDB引擎是基于磁盘存储的,将数据记录按照页的方式进行管理。对数据库页的修改操作,首页修改缓冲池中的页,然后再按照某种频率刷新到磁盘上,这种频率的控制是通过一种称为Checkpoint的机制来实现。缓冲池的大小直接影响到数据库的整体性能,其通过参数innodb_buffer_pool_size来设置,额外内存池通过参数innodb_additional_mem_pool_size来设置。

InnoDB缓冲池包含的数据页类型有:索引页,数据页,undo页,插入缓冲(insert buffer),自适应哈希索引,InnoDB存储的锁信息,数据字典信息等。结构图如下:

InnoDB1.0.X版本开始,允许有多个缓冲池实现。page根据哈希平均分配到不同的缓冲池实例中,用来减少资源竞争,提高并发。可以通过参数innodb_buffer_pool_instances进行配置。

时间: 2024-08-04 20:29:31

InnoDB体系构架的相关文章

InnoDb 体系架构和特性 (Innodb存储引擎读书笔记)

后台线程 Master Thread 核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘.例如脏页的刷新,插入缓冲的合并,undo 页的回收等. 每秒一次的操作: 日志缓冲刷新到磁盘,即使该事务还没有提交.该操作总是会发生,这个就是为了再大的事务,提交时间都很短. 当IO压力很小时(1s内发生的IO次数小于5% innodb_io_capacity)合并5% innodb_io_capacity 的插入缓冲. 当脏页比例大于 innodb_max_dirty_pages_cnt, 刷新 inno

InnoDB体系架构(二)内存

InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread.Page Cleaner Thread 四种. 这篇文章将介绍 InnoDB体系架构中的内存,主要有四小结分别为:缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲. 以下图为InnoDB存储引擎的内存结构.   一.缓冲池 InnoDB存储引擎是基于磁盘存储的,按照页的方式进行管理的,理解为基于磁盘

InnoDB体系架构(三)Checkpoint技术

Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用到了Checkpoint技术,这篇文章我们着重讲解一下Checkpoint在内存中到应用. 一.Checkpoint使用背景 由于日常DML语句,如:Update / Delete操作首先操作了缓冲池的数据,并没有立即写入到磁盘,这有可能会导致内存中数据与磁盘中的数据产生不一致的情况.而与磁盘数据不

InnoDB体系架构(四)Master Thread工作方式

Master Thread工作方式 在前面的文章:InnoDB体系架构--后台线程 说到:InnoDB存储引擎的主要工作都是在一个单独的后台线程Master Thread中完成.这篇具体介绍该线程的具体实现及该线程可能存在的问题. 一.InnoDB1.0X版本之前的Master Thread Master Thread具有最高的线程优先级别,内部由多个循环组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspend loop),

Innodb 体系架构

<Mysql技术内幕,Innodb存储引擎>--Innodb体系结构 InnoDB体系架构图如下: 一.后台线程简介: 1.Master ThreadMaster Thread 是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新.合并插入缓冲(INSERT BUFFER).回滚页(UNDO PAGE)的回收等. 2.IO Thread在InnoDB存储引擎中大量使用了AIO(Async IO)来处理IO请求,这样可以极大提高数据库的性能.而IO

InnoDB体系架构

Reference: https://time.geekbang.org/column/article/121710 InnoDB体系架构 InnoDB主要包括了内存池.后台线程以及存储文件. 内存池又是由多个内存块组成的,主要包括缓存磁盘数据.redo log缓冲等: 后台线程则包括了Master Thread.IO Thread以及Purge Thread等: 由InnoDB存储引擎实现的表的存储结构文件一般包括表结构文件(.frm).共享表空间文件(ibdata1).独占表空间文件(ibd

Mysql体系构架详解——内存

http://www.bitscn.com/pdb/mysql/201405/227583.html http://blog.csdn.net/wyzxg/article/details/7268122 http://blog.csdn.net/wyzxg/article/details/7268175 从内存的使用方式来说,MySQL数据库的内存使用主要分为以下两类 1.线程独享内存 2.全局共享内存 1.线程独享内存 在MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数

MySQL InnoDB体系架构之内存

先上图 1.缓冲池 InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理.通常使用缓冲池来提高数据库的整体性能.缓冲池简单说就是一块内存,通过内存的速度弥补磁盘速度较慢对数据库性能的影响.在数据库中进行读操作时,首先将从磁盘读到的页存放在缓冲池中,下一次读取相同的页时,首先判定是否存在缓冲池中,如果有就是被命中直接读取,没有的话就从磁盘中读取.在数据库进行改操作时,首先缓冲池中的页,然后在以一定的频率刷新到磁盘上.这里的刷新机制不是每页在发生变更时触发.而是通过一种check

MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

后台线程 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread  内存 重做日志在以下三种情况下将重做日志缓存中的内容刷新到外部磁盘的重做日志文件: Master Thread 每一秒将重做日志缓存刷新到重做日志文件: 每个事务提交时会将重做日志缓存刷新到重做日志文件: 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件: 原文地址:https://www.cnblogs.com/elontian/p/