InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。MySQL4.1以后的版本中,InnoDB可以将每个表的数据和索引存放在单独的文件中。这样在复制备份崩溃恢复等操作中有明显优势。可以通过在my.cnf中增加innodb_file_per_table来开启或关闭独立的表空间。
Innodb 使用MVCC来支持高并发,并实现了四个标准的隔离级别,默认级别为repeatable read,并且通过间隙锁来防止幻读。
InnoDB是基于聚簇索引建立的,聚簇索引对主键查询有很高的性能。不过它的二级索引(secondary index,非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。因此表上的索引较多的话,主键应当尽可能的小。
InnoDB做了一些优化,从磁盘读取数据时采用可预测预读,能够自动在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区
InnoDB的存储格式是平台独立的,可以将数据和索引文件从Intel平台复制到Sun SPARC平台或其他平台。
InnoDB通过一些机制和工具支持真正的热备份,MySQL的其他存储引擎不支持热备份。
其他
1.隐式锁显式锁
InnoDB在开启事务时,获取隐式锁,在事务提交或者回滚时释放锁,InnoDB根据隔离级别在需要的时候自动加锁。
但InnoDB也支持显式锁:
SELECT ... FOR UPDATE
SELECT ... LOCK IN SHARE MODE
这是在服务器层实现的,和存储引擎无关。本书建议除了禁用了AUTOCOMMIT,可以使用LOCK_TABLES之外,其他任何时候都不要显示地执行LOCK TABLES,不管使用的是什么存储引擎。
2.多版本并发控制(Multiversion Concurrency Controll MVCC)
MVCC并不是MySql独有的,Oracle,PostgreSQL等都在使用。
MVCC并没有简单地使用行锁,而是使用“行级别锁”(row-level locking)。
MVCC的基本原理是:
MVCC的实现,通过保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。
MVCC只在REPEATABLE READ和READ COMMITED两个隔离级别下工作,其它两个隔离级别和MVCC不兼容。
MVCC的基本特征:
• 每行数据都存在一个版本,每次数据更新时都更新该版本。
• 修改时Copy出当前版本随意修改,各个事务之间无干扰。
• 保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)
InnoDB存储引擎MVCC的实现策略:
• 在 每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号(可能为空)。这里的版本号并不是实际的时间值,而是系统版本号。每开始 个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询每行记录的版本号进行比较。
• 每个事务又有自己的版本号,这样事务内执行CRUD操作时,就通过版本号的比较来达到数据版本控制的目的。具体做法见下面的示意图。
3. 自适应哈希索引
哈希索引是一种非常快的等值查找方法(注意:必须是等值,哈希索引对非等值查找方法无能为力),它查找的时间复杂度为常量,InnoDB采用自适用哈希索引 技术,它会实时监控表上索引的使用情况,如果认为建立哈希索引可以提高查询效率,则自动在内存中的“自适应哈希索引缓冲区”建立哈希索引。
之所以该技术称为“自适应”是因为完全由InnoDB自己决定,不需要DBA人为干预。它是通过缓冲池中的B+树构造而来,且不需要对整个表建立哈希索引,因此它的数据非常快。
InnoDB官方文档显示,启用自适应哈希索引后,读和写性能可以提高2倍,对于辅助索引的连接操作,性能可以提高5被,因此默认情况下为开启,我们可以通过参数innodb_adaptive_hash_index来禁用此特性。
分享到:
相关推荐
在MySQL数据库系统中,InnoDB存储引擎是默认的引擎,它提供了事务处理、行级锁定以及外键支持,使得InnoDB在许多业务场景下成为首选。本篇文章将深入探讨InnoDB存储引擎中的索引大小问题,包括其影响因素、限制以及...
《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...
8. 关于InnoDB源码解析的工作方法 文档提出了一种解析InnoDB源码的方法,包括阅读C和C++源代码,用Ruby语言进行实现,并通过重构和校正使代码运行合理,最终进行文档化。这一过程有助于深入理解InnoDB的内部机制。 ...
标题《Innodb和XtraDB结构和性能优化》涉及的是数据库技术领域,特别是关于MySQL数据库中的存储引擎Innodb与XtraDB的内部结构和性能调优方法。Innodb是MySQL最流行的存储引擎之一,以支持事务处理和行级锁定著称。...
- **附录二**:提供了关于 InnoDB 存储引擎的更多细节,包括其实现原理和技术特点。 - **附录三**:探讨了 InnoDB 如何管理内存,包括缓冲池的使用等。 - **附录四**:列举了一些实际应用中的案例研究,展示了如何...
关于InnoDB锁机制的一些常见问题: - **死锁:** 如何避免死锁?InnoDB如何处理死锁? - **性能影响:** 使用不同的锁类型对系统性能有何影响? - **最佳实践:** 开发者应如何选择合适的锁类型以最大化并发性和...
### 关于使用InnoDB #### MySQL存储引擎InnoDB概述与设置 MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了多种存储引擎供用户选择,其中最常用的是MyISAM和InnoDB。本文主要介绍InnoDB存储引擎的特点、...
最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...
### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...
这是我从网上找到的mysql/mariadb对innodb表进行数据恢复的工具,实现从innodb的数据库文件中恢复数据,用于实现下面情况:1、直接下载了innodb数据库的文件,而不是导出其数据,想恢复数据时(需要有完整的文件,...
《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...
《深入解析py_innodb_page_info:MySQL InnoDB存储引擎底层探索》 在数据库的世界里,MySQL的InnoDB存储引擎以其强大的事务处理能力和行级锁定机制而备受青睐。然而,对于其内部工作原理,许多开发者可能并不十分...
### MySQL Innodb 引擎特性详解 #### 一、MySQL Innodb 引擎概述 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它提供了多种存储引擎以满足不同场景的需求。其中,InnoDB是最常用的一种存储引擎之一,...
《MySQL分析:深入理解InnoDB》 MySQL数据库系统在当今数据存储领域占据着重要的地位,尤其在InnoDB存储引擎的支持下,它提供了事务处理、行级锁定以及外键约束等功能,使得MySQL能够满足复杂的业务需求。InnoDB是...
### MySQL Innodb 参数详解与优化实践 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其InnoDB存储引擎因其高可靠性和事务处理能力而备受青睐。为了充分发挥InnoDB的优势并针对特定场景进行性能...
InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小: mysql> show variables like 'innodb_page_size'; 而系统一个磁盘块的...
《MySQL技术内幕-InnoDB存储引擎》是一本深入探讨MySQL数据库InnoDB存储引擎的权威书籍,而`py_innodb_page_info.zip`则是该书中提到的一个实用工具,用于分析InnoDB存储引擎的数据页信息。这个Python工具帮助我们...
### MySQL体系结构及原理(innodb)图文完美解析 #### 宏观认识 在深入探讨MySQL的体系结构及其核心组件InnoDB之前,我们先来理解几个基础概念。 1. **MySQL简介** MySQL是一种开源的关系型数据库管理系统(RDBMS)...
MySQL数据库系统提供了多种存储引擎,其中最常用的两种是MyISAM和InnoDB。它们各自具有独特的特性和适用场景,理解二者的性能差异对于优化数据库设计至关重要。 MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和...
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 ...