InnoDB体系架构

Reference: https://time.geekbang.org/column/article/121710

InnoDB体系架构

InnoDB主要包括了内存池、后台线程以及存储文件。

内存池又是由多个内存块组成的,主要包括缓存磁盘数据、redo log缓冲等;

后台线程则包括了Master Thread、IO Thread以及Purge Thread等;

由InnoDB存储引擎实现的表的存储结构文件一般包括表结构文件(.frm)、共享表空间文件(ibdata1)、独占表空间文件(ibd)以及日志文件(redo文件等)等。

1. 内存池

如果客户端从数据库中读取数据是直接从磁盘读取的话,无疑会带来一定的性能瓶颈,缓冲池的作用就是提高整个数据库的读写性能。

客户端读取数据时,如果数据存在于缓冲池中,客户端就会直接读取缓冲池中的数据,否则再去磁盘中读取;对于数据库中的修改数据,首先是修改在缓冲池中的数据,然后再通过Master Thread线程刷新到磁盘上。

理论上来说,缓冲池的内存越大越好。

缓冲池中不仅缓存索引页和数据页,还包括了undo页,插入缓存、自适应哈希索引以及InnoDB的锁信息等等。

InnoDB允许多个缓冲池实例,从而减少数据库内部资源的竞争,增强数据库的并发处理能力。

InnoDB存储引擎会先将重做日志信息放入到缓冲区中,然后再刷新到重做日志文件中。

2. 后台线程

Master Thread 主要负责将缓冲池中的数据异步刷新到磁盘中,除此之外还包括插入缓存、undo页的回收等

IO Thread是负责读写IO的线程

Purge Thread主要用于回收事务已经提交了的undo log

Pager Cleaner Thread是新引入的一个用于协助Master Thread刷新脏页到磁盘的线程,它可以减轻Master Thread的工作压力,减少阻塞

3. 存储文件

在MySQL中建立一张表都会生成一个.frm文件,该文件是用来保存每个表的元数据信息的,主要包含表结构定义。

在InnoDB中,存储数据都是按表空间进行存放的,默认为共享表空间,存储的文件即为共享表空间文件(ibdata1)。若设置了参数innodb_file_per_table为1,则会将存储的数据、索引等信息单独存储在一个独占表空间,因此也会产生一个独占表空间文件(ibd)。

而日志文件则主要是重做日志文件,主要记录事务产生的重做日志,保证事务的一致性。

原文地址:https://www.cnblogs.com/agilestyle/p/11428493.html

时间: 2024-10-25 12:05:13

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

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/

InnoDB体系构架

在InnoDB存储引擎的架构中,有多个内存块,这些内存块组成一个内存池.InnoDB存储引擎体系架构如下图所示: 后台线程 后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,另外,将已修改的数据文件刷新到磁盘文件,同时,保证在数据库发生异常的情况下,InnoDB能恢复到正常运行状态.InnoDB是多线程模型,不同的线程用于处理不同的任务. Master Thread Master Thread是核心后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,包括脏页的刷新,

MySQL 体系架构

MySQL 体系架构 本篇文章是对mysql体系结构进行了详细的分析介绍,需要的朋友参考下 上面一图是mysql的概览图,我们从上往下看, 我们把上面一图一分为二,我们可以吧它分为两个部分, 1,是connectors 的部分,即客户端部分 2,是大块的mysql server 把它个个部件拆开来看我们一个个来解析 1. connectors 指的就是mysql的客户端, 1. Management Serveices & Utilities: 这是mysql 的系统管理和控制工具,如bin 目