一、InnoDB存储存储引擎特征
在一条读写请求的SQL语句发送到MySql数据库的时候,数据并不会直接操作磁盘文件,会先操作InnoDB存储引擎内存池,进行磁盘文件的读写。通过InnoDB存储引擎内存池中的缓冲的数据页、索引页、索信息、重做日志等数据配合相关的后台线程,共同实现了4个重要的特征,包括:行级锁定、事务控制、并发控制(MVCC)、外键约束。
二、InnoDB存储引擎内存池
InnoDB存储引擎的数据存储在磁盘中,为了提高数据的读写效率,需要将数据缓存在内存中,这个区域就形成了一块缓冲池;
1、当客户端读取数据的时候,会先读取缓冲池中数据,如果缓冲池数据不存在,则将数据从磁盘以页为单位,读取到缓冲区中;
2、当客户端修改数据的时候,会先修改缓冲池中的页,然后再通过触发checkpoint机制刷回磁盘。
MySql数据库可以通过下面的语句进行缓冲区的设置
-- 将缓冲区设置为15GB
innodb_buffer_pool_size=15GB
1、缓冲池中数据对象
(1)、数据页主要数据信息:
-
实际数据,包含多行数据,按照主键进行排序;
-
页头、页目录、行目录、空闲空间等。
(2)、缓存池淘汰算法
数据库中的缓冲池是通过LRU(最近最少使用)算法来进行管理的,和常规的LRU算法不同,在InnoDB存储引擎中,最新读取到的页,不会放到LRU列表的首部,而是会放到midpoint位置,这个可以防止在意外执行一次全表扫描后,导致缓冲池全面被更新,但是这个全表扫描的语句只是偶发。当midpoint在经过一定时间后,以及存在,则会进入到长久列表中。