王志广的个人分享

        王志广的个人分享 >> IT >> MySQL InnoDB存储引擎

MySQL InnoDB存储引擎

admin发表于2018-01-08  3,383次浏览 标签: 

InnoDB是事务安全的MySQL存储引擎,设计上采用了类似Oracle数据库的架构。通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎。

MySQL分为实例和数据库。
数据库:物理操作系统文件或其他形式文件类型的集合。
实例:MySQL数据库由后台线程以及一个共享内存区组成。
通常情况下,两者是一对一关系;但在集群情况下可能存在一个数据库被多个数据实例使用的情况。
MySQL实例在系统上的表现就是一个进程。

InnoDB存储架构
文件()->InnnoDB存储引擎内存池(索引页、数据页、undo页、插入缓存、自适应哈希索引、InnoDB存储的锁信息、数据字典信息等)->后台线程(多线程处理不同任务)

InnoDB关键特性
1、插入缓存
2、两次写(在应用重做日之前,我们需要一个页的副本,当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是doublewrite)
3、自适应哈希索引(由于innodb不支持hash索引,但是在某些情况下hash索引的效率很高,于是出现了 adaptive hash index功能,innodb存储引擎会监控对表上索引的查找,如果观察到建立hash索引可以提高性能的时候,则自动建立hash索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)
4、异步IO
5、刷新临近页(当刷新一个脏页时,innodb会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做,通过AIO将多个IO写入操作合并为一个IO操作)

MySQL文件
1、参数文件
2、日志文件
3、socket文件(当用unix域套接字方式进行连接时需要的文件)
4、pid文件(实例进程ID文件)
5、MySQL表结构文件(用来存放MySQL表结构定义文件)
6、存储引擎文件(InnoDB内部使用报错各种数据文件)

InnoDB表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。在InnoDB中,每张表都有主键,如果没有定义InnoDB也会创建一个6字节大小的指针.

InnoDB索引与算法
InnoDB支持B+索引、全文索引、哈希索引.
InnoDB存储引擎表是索引组织表,即表中的数据按照主键顺序存放,聚集索引就是按照每张表的主键构造B+,同时叶子节点存放表的数据,也叫数据页。每张表只能有一个聚集索引。B+树是通过二叉查找树再到平衡二叉树、B树演化而来,一般高度位2-5层之间,IO消耗2-5之间,同时需要找到最优二叉树,当MySQL插入过多然后去维护平衡二叉树开销很大,

InnoDB锁
锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。InnoDB存储引擎需要锁升级,一个锁和多个锁开销相同,但是修改超过一定量会锁表,保证数据的唯一性。
锁分为:共享锁、排他锁、意向共享锁、意向排他锁.
锁的算法:Record Lock(单个记录上锁)、Gap Lock(间隙锁,锁一个范围,不包含记录本身)、Next-Key Lock(锁定一个范围,包含记录本身)
锁的问题:脏读(指事务对缓存池中的记录修改但还没有提交,能够读取到)、不可重复读(指在一个事务内多次读取同一个数据集合,会造成读取的数据不一致)、丢失更新(指一个事务更新操作会被另一个事务更新操作所覆盖,从而导致数据的不一致).
死锁指两个或者两个以上的事务执行过程中,因为夺锁资源造成的一种互相等待现象,可以说设置事务超时时间解决。

InnoDB事务
事务特性为原子性、一致性、隔离性、持久性.
InnoDB隔离性通过锁实现,原子性、一致性和持久性通过redo(重做日志,用来保证事务的原则性和持久性)和undo(逻辑日志,保证一致性)来完成.

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
已有1条评论
师兄今天想开了吗
2020 年 4 月 13 日

数据库需要缓存,分表

我来说两句

  Ctrl+Enter