InnoDB深入理解

原创 2015年11月21日 17:38:59

InnoDB体系架构 (存储引擎内存池,后台现成)

简单的将就是两个部分,一个是一个存储引擎内存池,还有一个就是有很多个后台线程,具体的讲是7个,4个IO线程 1个主要线程,1个锁监控线程,1个错误监控线程,四个IO分别是插入缓冲,日志 读 写。

存储引擎内存池具体的说是一个缓冲池,重做日志缓冲池,以及额外的内存池三个部分。一般缓冲池的大小是最大的,重做日志缓冲池和额外内存池比较小。

缓冲池主要是用来存放各种数据,这个地方牵扯到了InnoDB工作方式,就是将数据库文件按页读取到缓冲池,如果数据库文件需要修改,也是先修改缓冲池,然后刷新到文件的。

一般缓冲池中存放的是索引页,数据页,还有插入缓冲,自适应哈希索引,InnoDB的锁信息,数据字典等。

重做日志缓冲池,一般是将重做日志信息放到这个缓冲区中,然后按照一定频率将其刷新到文件。

额外内存缓冲池也很重要,对一些数据结构本身分配内存时,需要从额外缓冲池中分配。

综上,我们可以归纳出InnoDB体系结构

1.存储引擎池,

a) 缓冲池,用来缓存各种数据,索引,数据,锁的信息,错误信息等

b) 重做日志缓冲池,重做日志信息会放到这个缓冲池中,然后刷新到日志文件

c) 额外内存缓冲池,数据结构本身信息存放。

2. 7个线程

a) 4个IO线程 插入缓冲 读 写 日志

b) 1个锁监控线程

c) 1个错误监控线程

d) 1个主要线程

InnoDB的关键特性 (插入缓冲 两次写 自适应哈希)

1.插入缓冲,主要是针对非主键索引的插入和更新操作,如果是主键索引,顺序的插入就可以了,数据页的存放还是主键id的执行顺序,但是非主键索引,叶子节点的插入不再是顺序的,这个时候需要离散的访问非聚集索引,插入性能会变得很低。

插入缓冲的作用就是,对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是先判断非聚集索引页是否里,如果存在,那么直接插入,不存在就先插入到缓冲池中,然后以一定的频率合并缓冲区和索引页。

插入缓冲使用满足两个条件,1,非聚集索引, 2,索引不是唯一的

插入缓冲存在一个问题,在写密集的时候,插入缓冲会占用过多缓冲池内存,默认情况下最大可以占用1/2缓冲池内存。

2.两次写

如果说插入缓冲给InnoDB带来的是性能,那么两次写给InnoDB带来的就是数据的可靠性,如果在写一个页的时候,服务器宕机,那么就会导致这个页只写了一部分的情况,我们称这种情况叫做写失效,两次写就是准备一个副本,当写失效的时候,通过写副本来恢复原来的数据,在进行重做,至于如果进行,InnoDB存储引擎提供了一个两次写缓冲,大小为2M,另一个就是物理磁盘上共享表空间中连续的128个页。

当操作系统将页写入磁盘的时候宕掉了,那么在恢复过程中,InnoDB存储引擎可以从共享表空间中的doublewrite中找到该页的副本,然后将副本拷贝到表空间,在做重用日志。

3.自适应哈希索引

哈希是一种非常快的查找方法。官方的数据是,使用自适应哈希索引后,读取和写入数据可以提高2倍,对于辅助索引的的链接操作,性能可以提高至5倍


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

InnoDB 插入缓存

InnoDB 插入缓存Insert Buffer (插入缓存),InnoDB储存引擎的关键特性之一。他并不是在内存中的缓存池的一部分,而是物理页的一部分,和一般的数据页一样。Insert Buffer...

InnoDB Redo Flush及脏页刷新机制深入分析

我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页。既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中...

深入InnoDB的MVCC机制

一、基础知识 事务: 事务是一组原子性sql查询语句,被当作一个工作单元。若mysql对改事务单元内的所有sql语句都正常的执行完,则事务操作视为成功,所有的sql语句才对数据生效,若sq...

MySQL Innodb日志机制深入分析

MySQL Innodb日志机制深入分析 1.1. Log & CheckpointInnodb的事务日志是指Redo log,简称Log,保存在日志文件ib_logfile*里面。Innodb还有另...

关于InnoDB的Double Write技术的理解

为了解决写入数据文件时,实例或系统crash引起数据丢失的情况,InnoDB引入了Double Write技术。 实现Double Write的几个参与角色:在内存中需要划分1个名为 double w...

【mysql】关于innodb中MVCC的一些理解

【mysql】关于innodb中MVCC的一些理解

innodb_flush_method理解(图解)

innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式,对于这个参数,文档上是这样描述的: 有三个值:fdatasync(默认),O_DSYNC,...

理解B+树算法和Innodb索引

理解B+树算法和Innodb索引 A-A+ 茹憶2013-09-10 18:15:141,228次浏览B+树innodb算法索引  转载自: http://www.ruzuojun.co...

mysql 之 对InnoDB和MyISAM 的理解

MyISAM 和 InnoDB 讲解   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)