InnoDB引擎架构的主要组件构成

1.Buffer pool
主缓冲区中的一块区域,缓存table 和 index data。允许直接从内存中频繁的使用数据,以加速数据的处理速度。在专用服务器上,80%以上的物理内存都分配给buffer pool。
为了高效的查询操作,buffer pool被分割为 pages (可以包含一条或多条记录,这取决于记录的数据量)。
为了高效的缓存管理,buffer pool 被实现为pages 的链表,使用LRU算法把访问量小的数据移出buffer pool。

2.change buffer
当受影响的pages不在buffer pool里的时候,Change buffer 存储对二级索引 pages 的改变。由insert,update,或delete操作产生的缓存的数据更改会在read 操作执行的时候,将被修改的pages载入、合并到buffer pool。
在内存上,change buffer 是buffer pool的一部分。在硬盘上,change buffer 是system tablespace的一部分。
Change buffer缓存的数据类型由 innodb_change_buffering 配置项管理。
SHOW ENGINE INNODB STATUS 命令可以查看 change buffer 、buffer pool等相关信息
INFORMATION_SCHEMA.INNODB_BUFFER_PAGE 表提供了buffer pool中所有page 的元数据。

3.Adaptive hash index
如果查询可以从hash index中获益,Innodb自动的在内存中创建 hash index ,以加速 = 和 in 操作符的查询操作。
innodb_adaptive_hash_index 选项用于配置hash index的开关。Hash index 也保存在buffer pool中,因此是否开启,需要做一些相关测试查,确保其他性能不会受到影响。

4.redo log buffer
是把数据写入redo log的内存区域。Innobd_log_buffer_size 用于配置redo log缓冲区的大小。较大的缓冲区支持较大的运行事务,而不用在事务提交之前将redo log 写入磁盘。
相关配置项:innodb_flush_log_at_trx_commit 和 innodb_flush_log_at_timeout

5.System tablespace

一个或多个数据文件(ibdata files),包含了 innodb相关对象(data dictionary),是undo logs change buffer doublewrite buffer 的存储区域。也可以包含表和索引数据。

6.Data dictionary

用于追踪 表、索引、列等innodb对象的元数据。元数据信息保存在system tablespace中。由于历史原因,在 .frm文件中和一些其他信息部分重叠。

7.doublewrite buffer
位于system tablespace的一块存储区域。在pages 写入到合适的数据文件之前,InnoDB将数据从buffer pool写入此doublewrite buffer。只有在数据写入到doublewrite buffer之后,engine 才把pages 写入的最终的数据文件中。如果发生server故障,那么在故障恢复期间,innodb可以从d-buffer中获取到一份好的page副本。
Double buffer是默认开启的。 innodb_doublewrite=0 可以进行关闭。

8.undo logs
一个undo log 是与单一事务相关的undo log records集合。一个undo log record包含了如何撤销事务导致的一个最新的数据更改的信息。如果另外一个事务需要查看原始数据,那么innodb会从undo log records 中获取修改之前的数据。

9.File-per-table tablespaces
数据表使用独立的数据文件,而不是存储在system tablespace。每个单独的表空间默认对应一个数据目录下的 .ibd 文件

10.redo log
文件组:ib_logfile0 和 ib_logfile1,其构成了redo log。用于故障恢复,保障非完整事务处理数据的正确性。

11.group commit for redo log flushing
Innodb和其他支持acid的数据库引擎一样,在事务提交之前,来刷新redo log。Innodb将这些类型刷新请求进行分组,以避免每次刷新请求都进行一次提交。使用分组提交的方案,innodb 会对多个用户事务进行一次提交来一次性的写入redo log file,最终提高吞吐量。

涉及主要的概念解释:
Cluster index:又称为primary key index,主键列的值决定了表数据的存储顺序,通过主键列来加速查询和排序。因为主键列决定了存储顺序,修改主键列会花费很大的代价。
Secondary index:a type of innodb index ,聚集索引之外的索引,一个表可以设置0+个此种索引。
Segment:表空间的分割段。在file-per-table表空间中,表数据在一个segment里,每个相关的索引在其自己的segment里。System tablespace包含了很多不同的segment,也会包含用于undo logs的rollback segment。
Rollback segment:包含了undo log,系统表空间的一部分。
tablespace:一个可以持有一个或多个数据表和相关索引的文件。
ibdata file:一组这样的文件:ibdata1,ibdata2..等等。其组成了系统的表空间。也可能会包含部分或所有表数据(取决于file-per-table模式是否开启)。当innodb_file_per_table选项开启,新创建的数据和索引会保存在单独的 .ibd 文件中,而不是在systemtablespace中。
由innodb_autoextend_increment配置选项控制。
ibtmp file:临时的表空间数据文件。
ib_logfile:一个文件组,通常这样命名:ib_logfile0 和 ib_logfile1,其构成了redo log。
redo log :基于磁盘的数据结构。用于故障恢复,保证不完整事务写入数据的正确性。
.frm file :包含了mysql 表的元数据 ,例如:表的定义。但对于InnoDB引擎来说,虽然也拥有.frm文件,但是表的元数据却在system tablespace。

时间: 2024-10-06 05:40:58

InnoDB引擎架构的主要组件构成的相关文章

InnoDB引擎架构

简单画了下InnoDB存储引擎架构: 水平有限,若有不正确的地方欢迎指正. 原文地址:https://blog.51cto.com/liucb/2415938

浅谈MYSQL引擎之INNODB引擎

MYSQL 常用的引擎主要有一下几种,MRG_MYISAM .CSV .MyISAM.InnoDB.MEMORY ,NDB,其中MyISAM.InnoDB是mysql最常用的存储引擎,今天主要讨论 InnoDB引擎. 一.什么是InnoDB引擎 InnoDB引擎是MYSQL数据库的另一个重要的额存储引擎,正成为目前MYSQL AB所有发行新版的标准,被包含在所有二进制安装包里. 和其他的存储引擎相比,InnoDB引擎的优点支持兼容ACID的事物,以及参数完整性(即对外建的支持). MYSQL5.

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

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

游戏引擎架构学习

本书的主页第一部分 基础 第1章 导论1.1 典型游戏团队的结构 工程师:艺术家:游戏设计师:制作人:其他工作人员:发行商&工作室 1.2 游戏是什么 71.3 游戏引擎是什么 101.4 不同游戏类型中的引擎差异 111.5 游戏引擎概观 221.6 运行时引擎架构 271.7 工具及资产管道 46第2章 专业工具 532.1 版本控制 532.2 微软Visual Studio 612.3 剖析工具 782.4 内存泄漏和损坏检测 792.5 其他工具 80第3章 游戏软件工程基础 833.

Java面试05|MySQL及InnoDB引擎

1.InnoDB引擎索引 InnoDB支持的索引有以下几种: (1)哈希索引 (2)全文索引 (1)B+树索引 又可以分为聚集索引与辅助索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引.删除索引可以利用ALTER TABLE或DROP INDEX语句来实现. (1)使用ALTER TABLE语句创建索引.语法如下: alter table table_name add index index_name (colu

MySQL5使用Innodb引擎时如何设置数据文件按表存储

在Innodb引擎中,数据库的表可以共享存储空间也可以按表单独存储,共享存储空间虽然看起来简洁干净,但是从管理和运维的角度的看这种方式不可取.首先在同一个MySQL服务器下得不通数据库的表都会被存放于一个文件中,这个文件不会以为数据库某个表或者某些数据的删除二进行收缩,当数据库很多并且插入操作频繁的情况下,共享存储文件会增长的很快很大.如果数据库要做迁移,架构比较简单,但是存储于共享空间的中的数据就不太容易分离出来. 如果使用按表单独存储则可以很好的解决上述问题,遗憾的是MySQL5中使用Inn

MySQL中innodb引擎分析(初始化)

MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧! 依据<深入理解MySQL>的内容,5.1版本号时存储引擎的插件化都还不是彻底,确切的说是刚加入的特性.为MySQL加入一个存储引擎时,须要更改一些上层代码,零散的更改本来就有点麻烦,同一时候project也要又一次编译一次.我听别人说,已经能够不改C/C++代码就直接加入引擎了.这种话,折腾存储引擎的话就更方便了! 这段代码来自ha_innodb.cc,这是MySQL中申明存储引擎插件的标准过程.这段代码利用了宏.在p

MySQL的多存储引擎架构

支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将首先介绍MySQL的整体逻辑架构,然后分析MySQL的存储引擎API并介绍如何编写自己的MySQL存储引擎. MySQL逻辑架构 MySQL作为一个大型的网络程序.数据管理系统,架构非常复杂.下图大致画出了其逻辑架构. Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的应

Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife

时间 2014-03-24 11:18:00  博客园-所有随笔区原文  http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个platforms.Unity3D由游戏引擎和编辑器.该引擎包含的软件组件,在游戏的研究与开发中最常见