InnoDB简介
InnoDB的github地址:https://github.com/mysql/mysql-server/tree/5.7/storage/innobase 。InnoDB是一种平衡高可靠性和高性能的通用存储引擎。在MySQL 5.7中,InnoDB是默认的MySQL存储引擎。
InnoDB的主要优势: InnoDB的MDL操作遵循ACID模型,具有提交,回滚和崩溃恢复功能的事务来保护数据;支持行级锁定和一致性读取提高了并发性和性能;InnoDB每个表都有一个称为聚簇索引的主键索引,用于组织数据以最小化主键查找的IO;InnoDB支持外键约束,使用外键,将检查 插入,更新和删除,以确保它们不会导致不同表之间的不一致。
Mysql存储引擎整体架构图
mysql InnoDB存储引擎主要分为两大部分内存结构和磁盘结构。其中内存结构由buffer pool(缓冲池),change buffer(改变缓冲区),adaptive hash index(自适应哈希索引),log buffer(日志缓冲区).四部分构成。磁盘结构由tables(表),indexes(索引),tablesspace(表空间),InnoDB Data Dictionary(InnoDB 数据字典),Doublewrite Buffer(双写缓冲区), Redo Log(重做日志), Undo Log(撤销日志) 七部分组成。
Mysql存储引擎整体架构图
InnoDB的内存结构
Buffer Pool(缓冲池)
buffer pool是主存中的一个区域,用于缓存表和索引数据。缓存池允许直接从内存处理常用数据来提升处理速度。在专用的服务器上,通常会将最多80%的物理内存分配给缓冲池。
为了提高大容量读取的效率,缓冲池被分成可容纳多行的页面。为了提高缓存管理的效率,缓冲池被实现为链接的页面列表;使用LRU算法的变体,很少使用的数据在缓存中老化。