XtraDB/InnoDB的文件格式

目前,XtraDB/InnoDB支持两种格式的存储文件:Antelope(羚羊)和Barracuda(梭鱼)(译者注:动物的名称,且首字母从前到后排列,本文结尾还提到了26种文件格式,全是动物名命名)。可以通过服务器变量innodb_file_format设置文件的格式。默认设置为Antelope。在MySQL 5.5.0和5.5.6版本之间的文件格式默认为Barracuda,但这种格式在升级的时候,某些情况下可能会导致复制(replication)出现问题,因此在MariaDB中默认的格式总是设置为Antelope。

系统表空间使用Antelope文件格式,且无法更改。基于此,为了让用户表使用Barracuda格式,需要设置变量innodb_file_per_table

MariaDB starting with 10.0

MariaDB 10.0开始,可以从表Information Schema INNODB_SYS_TABLES中查看到所使用的文件格式。

兼容性

每个表空间都会用它最近所使用的表的文件格式id进行标记。所有版本的XtraDB/InnoDB都可以读取较旧文件格式的表。但是,无法读取更新一些格式的表。基于此原因,每次XtraDB/InnoDB打开一个表时都会检查表空间的格式,并且在发现使用了新文件格式时报错。 (原文:Each tablespace is tagged with the id of the most recent file format used by one of its tables. All versions of XtraDB/InnoDB can read tables that use an older file format. However, it can not read from more recent formats. For this reason, each time XtraDB/InnoDB opens a table it checks the tablespace's format, and returns an error if a newer format is used.)

可以通过设置变量innodb_file_format_check来跳过检查。但注意,在发现了未知格式时,XtraDB/InnoDB会尝试修复该表,从而损坏表。这种情况会发生在禁用了innodb_file_format_check变量后服务器崩溃,或者使用快速停止服务(fast shutdown)时。

要从Barracuda格式降级为Antelope格式,可以通过ALTER TABLE语句设置表的ROW_FORMAT为支持Antelope的值。这会重建索引。

Antelope格式的表可以在MariaDB和低于5.5版本的MySQL上正常工作。

注意,表空间会被标记为支持所使用的行格式(row format)的最低文件格式。 因此,即使启用的是Barracuda,但如果使用的行格式为Compact或Redundant,表格式也会被标记为Antelope。

Antelope

Antelope是InnoDB的原始文件格式,支持COMPACT和REDUNDANT行格式,但不支持动态或压缩行格式。

Barracuda

Barracuda是一种更新的InnoDB文件格式,支持COMPACT、REDUNDANT、DYNAMIC和COMPRESSED行格式。带有BLOB或TEXT数据类型的表可大幅受益于dynamic行格式。

未来的格式

未来XtraDB/InnoDB可能会使用新的文件格式。每种格式都有自己的名称,它们的标识符id从0-25。这些名称已经想好了,全是根据字母表顺序决定的动物名:Antelope, Barracuda, Cheetah, Dragon, Elk, Fox, Gazelle, Hornet, Impala, Jaguar, Kangaroo, Leopard, Moose, Nautilus, Ocelot, Porpoise, Quail, Rabbit, Shark, Tiger, Urchin, Viper, Whale, Xenops, Yak和Zebra。

See also

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.