一、InnoDB主要引擎特点
InnoDB是Windows发行版下默认的存储引擎,它有以下特点:
1)、支持事务,主要面向事务处理(OLTP)方面的应用
2)、行锁设计,支持外键
3)、将数据放入一个逻辑的表空间
4)、使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE,默认为REPEATABLE级别;
5)、使用next-key locking策略避免幻读现象;
6)、提供了插入缓冲、二次写、自适应哈希索引、预读等功能
7)、表数据采用聚集方式
二、关键特性
1、插入缓冲
对于非聚集索引的插入或更新操作,不是每一次都直接插入索引页。而是先判断插入的非聚集索引页是否在缓冲池中,若在则直接插入,否则先放入插入缓冲池中。
插入缓冲需满足两个条件:
1)索引是辅助索引
2)索引不是唯一的
可通过命令SHOW ENGINE INNODB STATUS查看插入缓冲信息。
插入缓冲带来的是性能的提高。
2、两次写
两次写带来数据的可靠性;
解决部分写失效问题:当数据库正在从内存向磁盘写一个数据页时,数据库宕机,从而导致这个页只写了部分数据
原理图:
组成部分:
内存中的doublewrite buffer,大小2M
物理磁盘上共享表空间中连续的128页,两个区,共大小2M
工作过程:
当缓冲池的脏页刷新时,并不直接写磁盘,而是先将脏页拷贝到内存中的doublewrite buffer中,然后该buffer分两次写,每次写入1M到共享表空间的物理磁盘上,然后立即调用fsync函数同步磁盘,避免缓冲写带来的问题。如果操作系统在将该页写入磁盘的过程中崩溃了,则在恢复过程中,InnoDB引擎可从共享表空间中的doublewrite中找到页的一个副本,将其拷贝到表空间文件,然后重做日志。
可使用skip_innodb_doublewrite禁用两次写功能。
3、自适应哈希索引
InnoDB存储引擎会监控对表上的索引的查找,若观察到建立哈希索引可以带来速度的提升则建立哈希索引。InnoDB会自动根据访问的频率和模式来为某些页建立哈希索引。