innodb架构图
innodb架构主要由两部分组成:in-memory & on-disk,即内存结构和磁盘结构。
架构图:
这里单独介绍一下磁盘结构。
innodb磁盘结构
1.InnoDB的磁盘结构中表空间的作用?
表空间
是innodb物理存储中最高层。
系统表空间
1)系统表空间
物理文件:ibdata1
系统表空间是一个共享的表空间,该空间数据文件默认是ibdata1,通过如下参数查看:
show variables like '%innodb_data_file_path%';
默认文件名ibdata1、大小12M、自动扩展。
在设定了系统表空间自动扩展后,则不可缩减,即使删除系统表空间中的表和索引,也不会缩减其在磁盘中的大小(只是对已删的做标记)。
2)系统表空间
包含的部分:
- 数据字典:其中包含了表结构信息、数据库名、表名、字段类型和信息、视图、索引、MySQL版本等元数据信息。
- 双写缓冲:用于保证写入磁盘时页数据的完整性,防止发生写失效的问题。
- 修改缓冲:内存中change buffer对应的持久化的区域,也是为了保证数据完整性。
- 回滚日志:记录数据修改前的状态的逻辑日志,实现事务回滚和多版本并发控制。
3)独立表空间
每个表都有自己独立的表空间,每个表的数据和索引都会存在自己的表空间当中。
独立表空间的作用:可以实现单表在不同数据库的文件移动。
独立表空间的存储空间是可以回收的(在删除或清空后)。
4)通用表空间
类似系统表空间,也是共享的,可以存储多个表的数据。相比于独立表空间来说,通用表空间由于是多表共享的空间,消耗的内存更少一点,占用的磁盘空间也会更小一点。
创建通用表空间语法:
create tablespace ts1 add datafile 'ts1.ibd' file_block_size=16384;
file_block_size=16384即指定一页最小16K。文件会被创建在data_dir中。
查看通用表空间语法:
select * from information_schema.innodb_sys_tablespaces where name = 'ts1';
5)回滚表空间
用来保存undo log。undo log默认是保存在系统表空间ibdata1中的,8.0有单独的文件。
查看回滚表空间路径:
show variables like '%innodb_undo_directory%';
如果显示./则表示系统表空间中,8.0默认表空间名称为undo_001,undo_002。
未完待续