Innodb逻辑存储单元为为表空间,段,区,页 mysql
InnoDB存储引擎表中全部数据都是存储在表空间中的,表空间分为系统表空间,自定义表空间,系统表空间以ibdatal来命名,存储全部数据信息和回滚段(undo)的信息(mysql 5.6以后能够设置undo存储位置),初始化大小10MB,==Innodb_data_file_path==负责定义系统表空间的路径,初始化大小,自动扩展策略,默认的扩展大小是64MB,建议将系统表空间大小调整为1G,由于在遇到高并发事务时,数据信息/undo会比较大,会对性能有不小的影响sql
目前mysql中默认使用的都是独立的表空间,独立表空间中存储对应表的B+树数据,索引数据,插入缓存,其他信息都存储在默认表空间缓存
独立表空间每张表都有本身的表空间,表空间转移、回收表空间比较方便,不过每一个表空间都有.frm和.ibd文件两个文件描述符,增加过块会有性能问题并发
系统表空间也能够理解为共享表空间,共享表空间没法在线回收空间,需将所有Innodb表中数据备份,删除原表,而后再把数据导回到与原表结构同样的新表高并发
mysql5.7以后新增临时表空间和通用表空间性能
1.临时表空间就是将临时表的户数从系统表中抽离出来,造成本身独立表空间,参数inndodb_tmp_data_file_path,不过不能定义临时表文件的存放路径,文件名为ibtmpl,默认大小12M 2. 通用表空间就是多个表放在同一表空间中,按照活跃度来划分表,存放在不一样的磁盘,目前生产中不多用
表空间是由段组成的,一般有索引段,数据段,回滚段,==每一个段都是有N个区和32零散页组成==,段空间扩展是以区为单位进行扩展,一般建立一个索引会建立2个段,分别为非叶子节点段,叶子结点段。一张表一般有4个段大数据
区是连续的页组成,物理上连续分配的一段空间,==大小固定是10M,通常一个区是由64页组成==3d
最小的物流存储单位为页,默认大小是16Kb,1个区大小16*64=1M,mysql5.6能够自定义page大小,从16kb调整为32kb,64kb指针
页里面记录行信息,InnoDB存储引擎有两种文件格式:Antelope和Barracuda,Antelope记录格式有compact和redundant,Barracuda记录格式有compressed和dynamic,mysql5.7默认是dynamic记录格式和barracuda文件格式.code
不一样的记录格式区别在于对于行溢出的不一样处理方案(行溢出简单来讲数据在当前存储页面外,拆分多个页面进行存储),针对于大数据类型text,dynamic将采用的数据存放在溢出的页中,数据页中只存储前20个字节指针,在comapct模式下溢出的页只能存放768个字节