文档章节

innodb关键特性和体系架构整理

落叶刀
 落叶刀
发布于 2016/06/14 21:27
字数 1132
阅读 84
收藏 2

Innodb关键特性:

1,插入缓冲(insert Buffer)

2,两次写(Double Write)

3,自适应哈希索引(Adaptive Hash Index)

4,异步IO(Async IO)

5,刷新紧邻页(Flush Neighbor Page)

Innodb体系架构:后台线程和innodb存储引擎内存池。

InnoDB 存储引擎有多个内存块,这些内存块组成了一个大的内存池,主要负责如下工作:
1,维护所有进程/线程需要访问的多个内部数据结构
2,缓存磁盘上的数据, 方便快速读取, 同时在对磁盘文件修改之前进行缓存
3,重做日志(redo log)缓冲

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

1. Master Thread:这是最核心的一个线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括赃页的刷新、合并插入缓冲、undo 页的回收等.
2. IO Thread:在 InnoDB 存储引擎中大量使用了异步 IO 来处理写 IO 请求, IO Thread 的工作主要是负责这些 IO 请求的回调.可以通过命令来观察 InnoDB 中的 IO Thread: show engine innodb status

3. Perge Thread:事物被提交之后, undo log 可能不再需要,因此需要 Purge Thread 来回收已经使用比分配的 undo页. InnoDB 支持多个 Purge Thread, 这样做可以加快 undo 页的回收
InnoDB 引擎默认设置为4个 Purge Thread:show variables like "innodb_purge_threads"
4. Page Cleaner Thread:Page Cleaner Thread 是新引入的,其作用是将之前版本中脏页的刷新操作都放入单独的线程中来完成,这样减轻了 Master Thread 的工作及对于用户查询线程的阻塞

innodb存储引擎内存池

innodb内存数据对象:缓冲池,重做日志缓冲,额外的内存池。
1. 缓冲池:简单来说就是一块内存区域.在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,下一次读取相同的页时,首先判断该页是不是在缓冲池中,若在,称该页在缓冲池中被命中,直接读取该页.否则,读取磁盘上的页.对于数据库中页的修改操作,首先修改在缓冲池中页,然后再以一定的频率刷新到磁盘,并不是每次页发生改变就刷新回磁盘.缓冲池的大小直接影响数据库的整体性能,对于 InnoDB 存储引擎而言,缓冲池配置通过参数 innodb_buffer_pool_size
show variables like 'innodb_buffer_pool_size'
缓冲池中缓存的数据页类型有:索引页、数据页、 undo 页、插入缓冲、自适应哈希索引、 InnoDB 的锁信息、数据字典信息等.索引页和数据页占缓冲池的很大一部分.

2. 重做日志缓冲
InnoDB 存储引擎先将重做日志信息放入这个缓冲区,然后以一定频率将其刷新到重做日志文件.重做日志文件一般不需要设置得很大,因为在下列三种情况下重做日志缓冲中的内容会刷新到磁盘的重做日志文件中.Master Thread 每一秒将重做日志缓冲刷新到重做日志文件
每个事物提交时会将重做日志缓冲刷新到重做日志文件当重做日志缓冲剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件
3. 额外的内存池:InnoDB 存储引擎中, 对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请.例如,分配了缓冲池,但是每个缓冲池中的帧缓冲还有对应的缓冲控制对象,这些对象记录以一些诸如 LRU, 锁,等待等信息,而这个对象的内存需要从额外的内存池中申请内存

© 著作权归作者所有

共有 人打赏支持
落叶刀
粉丝 38
博文 123
码字总数 105194
作品 2
浦东
运维
私信 提问
DTCC2013:深入解析MySQL InnoDB引擎

  【IT168 现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、...

it168网站
2013/04/19
0
0
MySQL探秘(三):InnoDB的内存结构和特性

 常言说得好,每个成功男人背后都有一个为他默默付出的女人,而对于MySQL来说,这个“人”就是InnoDB存储引擎。  MySQL区别于其他数据库的最为重要的特点就是其插件式的表存储引擎。而在众...

carpediem123
08/26
0
0
MySQL性能优化系列-01原理与概念

MySQL概述 MySQL数据库目前已被Oracle收购,并发展处多个版本。目前使用最广泛且免费的MySQL版本是MySQL Community(社区版),另外还有三个付费的MySQL版本MySQL Standard(MySQL标准版)、...

东皇巴顿
2017/04/25
0
0
Mysql配置参数innodb_buffer_pool_size的学习与整理

原文地址:Mysql配置参数innodbbufferpoolsize的学习与整理 这半个月来,一直在做一些关于服务器交易端性能的提升工作,主要是分析和讨论交易端性能的瓶颈,找出导致性能减慢的原因,拟定出合...

Realfighter
2015/01/15
0
1
InnoDB并发如此高,原因竟然在这?

《InnoDB行锁,如何锁住一条不存在的记录?》埋了一个坑,没想到评论反响剧烈,大家都希望深挖下去。原计划写写InnoDB的锁结束这个case,既然呼声这么高,干脆全盘系统性的写写InnoDB的并发控...

架构师之路
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
11分钟前
0
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
22分钟前
3
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
32分钟前
8
0
Kubernetes系列——Kubernetes 组件、对象(二)

一、Kubernetes 组件 介绍了Kubernetes集群所需的各种二进制组件。 Master 组件 Master组件提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一...

吴伟祥
42分钟前
13
0
Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部