file-per-table表空间包含一个单一的数据和索引InnoDB
表,存储在文件系统在一个单一的数据文件。
File-per-table表空间特征描述在下列主题在本节中:
InnoDB
创建表file-per-table默认表空间。这种行为的控制innodb_file_per_table
变量。禁用innodb_file_per_table
原因InnoDB
在系统中创建表的表空间。
一个innodb_file_per_table
设置在一个选项可以指定文件或配置在运行时使用集全球
声明。在运行时更改设置,需要足够的特权设置全局系统变量。看到部分5.1.9.1,“系统变量特权”。
选择文件:
(mysqld) innodb_file_per_table =
使用集全球
在运行时:
mysql >设定全球innodb_file_per_table =;
file-per-table表空间是在创建的.idb
在模式数据文件目录下的MySQL数据目录。的.ibd
文件命名的表(
)。例如,表的数据文件table_name
.ibdtest.t1
创建的测试
MySQL数据目录下的目录:
mysql >使用测试;mysql > CREATE TABLE t1 (INT id主键AUTO_INCREMENT名称VARCHAR(100))引擎= InnoDB;$ > cd /路径/来/mysql/数据/测试> ls t1.ibd美元
您可以使用数据目录
条款的创建表
声明中隐式地创建一个file-per-table表空间数据文件之外的数据目录中。有关更多信息,请参见部分15.6.1.2,“创建外部表”。
File-per-table表空间有以下优势共享表空间等系统表空间或一般的表空间。
磁盘空间后返回给操作系统删除或删除表中创建file-per-table表空间。删除或删除一个表存储在一个共享表空间内创建自由空间共享表空间数据文件,它只能用于
InnoDB
数据。换句话说,一个共享表空间数据文件后不收缩的大小被截断或删除表。一个table-copying
ALTER TABLE
操作的表上驻留在共享表空间可以增加磁盘空间占用的表空间。这样的操作可能需要尽可能多的额外的空间中的数据表加索引。这个空间没有公布回file-per-table表空间的操作系统,因为它是。截断表
性能更好的执行时表驻留在file-per-table表空间中。File-per-table表空间数据文件可以创建在不同的存储设备I / O优化、空间管理,或备份。看到部分15.6.1.2,“创建外部表”。
您可以导入一个表,从另一个MySQL实例驻留在file-per-table表空间。看到部分15.6.1.3,“进口InnoDB表”。
表file-per-table表空间中创建支持特性有关
动态
和压缩
行格式不支持的系统表空间。看到15.10节,“InnoDB行格式”。表存储在单独的表空间数据文件可以节省时间和提高成功复苏的机会当发生数据损坏时,当备份或二进制日志不可用,或者当MySQL服务器实例不能被重新启动。
file-per-table表空间中创建的表可以快速备份或恢复使用MySQL企业备份,而不中断的使用
InnoDB
表。这是有利于表在不同备份时间表或需要备份的频率更低。看到使部分备份获取详细信息。File-per-table表空间允许监控表大小的文件系统通过监测表空间的数据文件的大小。
常见的Linux文件系统不允许并发写入一个文件,如共享表空间数据文件时
innodb_flush_method
被设置为O_DIRECT
。因此,有可能使用file-per-table表空间时性能改进与此设置。表在共享表空间是有限大小的64 tb表空间大小限制。相比之下,每个file-per-table表空间有一个64 tb大小限制,为个人提供足够的空间表变大。
File-per-table表空间有以下缺点相比,共享表空间等系统表空间或一般的表空间。
file-per-table表空间,每个表可能有未使用的空间,只能利用表相同的行,从而导致浪费的空间如果不妥善管理。
fsync
操作上执行多个file-per-table数据文件,而不是一个共享表空间数据文件。因为fsync
操作每个文件,写操作多个表不能结合,这会导致更高的总数fsync
操作。mysqld必须为每个file-per-table保持开放的文件句柄表空间,这可能会影响性能file-per-table表空间中如果你有无数的表。
需要更多的文件描述符时,每个表都有自己的数据文件。
有可能更多的碎片,从而阻碍
删除表
和表扫描性能。然而,如果分段管理,file-per-table表空间可以改善这些操作的性能。缓冲池扫描当删除一个表驻留在file-per-table表空间,这可能需要几秒钟对于大型缓冲池。扫描执行广泛的内部锁,可能会推迟其他操作。
的
innodb_autoextend_increment
变量,它定义了增量规模扩展的大小auto-extending共享表空间文件当它被填满时,并不适用于file-per-table表空间文件,auto-extending不管innodb_autoextend_increment
设置。初始file-per-table表空间扩展是通过少量,之后扩展发生在4 mb的增量。