InnoDb介绍
本页讨论:
- InnoDB的整体架构
- InnoDB的主要优点
- InnoDB的功能特性
- 检查InnoDB可用性
InnoDB的整体架构
InnoDB兼具高可靠性和高性能。 在MySQL 5.6中,InnoDB是默认的官方推荐的存储引擎。
InnoDB的整体架构图:(请忽略图中的XTraDB)
InnoDB多线程模型:
多线程
InnoDB存储引擎是多线程的模型,因此其后台有多个不同的线程,负责处理不同的任务:
- Master Thread 一个核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证 数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。
- IO Thread InnoDB存储引擎大量使用了AIO(Async IO)来处理写IO请求,这样极大地提高了数据库的性能。IO Thread的工作主要是负责这些IO请求的回调处理。
- Purge Thread 事务被提交后,其所使用的undolog可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。
- Page Cleaner Thread Page Cleaner Thread是在InnoDB1.2.x版本中引入的。其作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。目的是为了减轻原Master Thread的工作及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。
InnoDB内存数据对象图:
一些MySQL的内部实现仍然使用MyISAM,比如 information_schema这个数据库中保存了MySQL服务器所有数据库名,数据库的表,表栏的数据类型。
而且,您不能将授权表(grant tables)切换为使用InnoDB。
InnoDB的主要优点
- 其DML操作遵循ACID模型,具有提交,回滚和崩溃恢复功能的事务。可以有效的保护用户数据。
- 行级锁定和Oracle风格一致的读取增加了多用户并发和性能。
- InnoDB表将您的数据安排在磁盘上,以优化基于主键的查询。每个InnoDB表都有一个主键索引,称为聚簇索引,用于组织数据以最小化主键查找的I / O。
- 为了保持数据的完整性,InnoDB支持FOREIGN KEY约束。检查外键,插入,更新和删除是否确保不会导致不同表之间的不一致。
InnoDB的功能特性
存储限制 | 64TB | 事务 | 是 | 锁定粒度 | 行 |
MVCC | 是 | 空间数据类型支持 | 是 | 空间索引支持 | 是 |
B树索引 | 是 | T树索引 | 否 | 散列索引 | 否 |
全文搜索索引 | 是 | 聚簇索引 | 是 | 数据缓存 | 是 |
索引缓存 | 是 | 压缩数据 | 是 | 加密数据 | 是 |
群集数据库支持 | 否 | 复制支持 | 是 | 外键支持 | 是 |
备份/时间点恢复 | 是 | 查询缓存支持 | 是 | 更新数据字典的统计信息 | 是 |
检查InnoDB可用性
确定您的服务器是否支持InnoDB:
发出命令
SHOW ENGINES;
查看所有不同的MySQL存储引擎。 在InnoDB行中查找DEFAULT。
或者查询INFORMATION_SCHEMA ENGINES表。