5.7
1.三部分架构:上层应用内存空间——OS磁盘高速缓存——磁盘
2.上层应用内存空间
buffer pool:缓冲池
当访问表或者索引信息会被缓存到这里,这样能够把经常访问的信息缓存到这里;每个小块是一个page,以链表的形式管理,另外是立即刷盘,不同log buffer可以控制写入缓存再写入磁盘;选用变种型LRU(最近最少使用)替换算法,page的使用跟JVM的设计有些类似,分代的
- 以链表的形式管理:使用的page会用链表连接(Database pages ),空闲page也会连起来(Free buffers ),脏page也会用链表连起来(Modified db pages)来管理
- 变种型LRU,page跟JVM的设计有些类似,分代的,是在新老带中间插入,如果数据很快被访问会往head去移动,不被访问会往tail移动被淘汰。先去空闲链表分配,分配完删除,加入到使用链表。链表适合增删,所以使用链表可以O(1)级别在年轻与老年代移动
show engine innodb status
Buffer pool size 512
Free buffers 249
Database pages 256
Old database pages 0
Modified db pages 0
Change Buffer:写缓冲区
对非唯一普通索引的 INSERT, UPDATE,or DELETE operations (DML)会导致Change Buffer变化,主键与unique索引无法使用。
更新一条记录的话,如果在pool buffer中存在直接在pool buffer中修改完成;如果pool buffer没有,就会在change buffer中记录完成。两种都不需要磁盘操作。如果下次查询改记录,会先去磁盘读取,然后再从change buffer中合并,最后写入buffer pool
log buffer :日志缓冲区,保存写入磁盘的日志信息,有redo undo 等,有刷盘操作会进行刷盘
右边:磁盘结构
daptive Hash Index:自适应hash索引
对buffer pool优化,监控对索引使用情况,频繁使用就建立hash索引来寻找
Log Buffer
DML操作会产生redo,undo日志,logbuffer会根据刷盘策略来写盘
innodb_log_buffer_size variable.:The default size is 16MB
innodb_flush_log_at_trx_commit:variable controls how the contents of the log buffer are written and flushed to disk,注:这里written是写入OS高速磁盘高速缓存,flush是由缓存写入磁盘,0每隔1s written +flushed ,1事务完成 written +flushed ,2事务完成written 1s 后flushed
innodb_flush_log_at_timeout:variable controls log flushing frequency.
3. 磁盘
system tablespace:系统表空间
innodb数据字典,undo buffer;被多表共享
Doublewrite Buffer: 存储缓冲池中flush的page,以免在flush时操作系统,存储系统,mysqld进程的意外发生,重启后可以找到很好的备份;两次写数据,但不需要花费两次IO查找
File-Per-Table Tablespaces:我们经常用的
默认开启,不开启就创建就会放在系统表空间,即ibdata1文件中,而开启就会没创建都会生成自己的ibd文件
mysql> SET GLOBAL innodb_file_per_table=ON;
mysql> USE test;
mysql> CREATE TABLE t1 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
) ENGINE = InnoDB;
shell> cd /path/to/mysql/data/test
shell> ls
t1.ibd
General Tablespaces:可以在其他目录创建,避免与隐式创建的File-Per-Table Tablespaces冲突
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd' Engine=InnoDB;
Undo Tablespaces:撤销表空间,有一组undo文件构成
Temporary Tablespace:全局与当前临时表空间
4. 数据存储格式
.frm存储定义,.ibd存储数据与索引
8.0
- 双写剥离
- system undo与undo合并,分为系统undo 与用户自定义
- temporary tablespaces 全局与局部拆分