日期:2014-05-16  浏览次数:20441 次

MySQL源码分析(6):Innodb文件格式及压缩配置
Innodb文件格式及压缩配置
Innodb文件格式代表了数据库文件在磁盘上的组织形式。



Tablespace包含了很多文件或raw disk partition。
当innodb_file_per_table = on时,每个数据库会使用单独的ibd文件存储数据,否则将和系统表等数据一起放在innodb_data_file_path指定的文件中。
在系统表空间中,innodb会维护一些系统信息:
Internal data dictionary
Undo
Insert buffer
Double write buffer
Mysql replication info
表空间有多个层次,其中最小的单位是page,在未压缩时每个page是16k;64个page组成一个extent;多个extent和page构成一个segment。



在Innodb中,page有很多中格式,如下图所示:



存放若干条记录的page的格式如下图所示,由page header,page trailer,page body组成。



在Innodb中可以指定文件格式,它们会是Antelope, Barracuda, Cheetah, Dragon, Elk, Fox等等,按照字母顺序继续排列。
Antelope是Built-in-InnoDB(MySQL内置的InnoDB)支持文件格式的代号,有两种“数据表格式”(row_format):Redundant、Compact;Barracuda是InnoDB Plugin支持的文件格式,在原来的基础上新增了两种数据表格式的支持:Dynamic和Compressed。
一般,innodb_file_format在配置文件中指定;row_format则在创建数据表时指定。

启用压缩格式的条件
a).Innodb_file_per_table = 1
b).Innodb_file_format = barracuda
CREATE TABLE name (column1 INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
这条语句将会创建一个压缩的page size=8K的表。