首页 > 代码库 > innodb_file_per_table
innodb_file_per_table
即时打开innodb_file_per_table选项,依然需要为回滚日志和其他系统数据创建共享表空间,没有把所有数据放在其中是明智的做法,但最好还是关闭它自动增长,因为无法在不重新导入全部数据的情况下给共享表空间瘦身。
一些人喜欢是用innodb_file_per_table,只是因为特别容易管理,并且可以看到每个表的文件,例如,可以通过查看文件的大小来确认表的大小,这比用show table status 来看快很多,这个命令需要执行很多复杂的工作来判断给一表分配了多少页面。
innodb_file_per_table也有不好的一面,更差的drop table 性能,这可能足以导致显而易见的服务器阻塞(没有理解)。因为有如下两个原因:
删除表需要从文件系统层去掉文件,这可能在某些文件系统,比如ext3上回很慢,可以通过欺骗文件系统来缩短这个过程,把idb文件链接到一个0字节的文件,然后手动删除中个文件,而不用等待mysql来做
当打开这个选项,每张表都在innodb中使用自己的表空间,结果是,移除表空间实际上需要innodb锁定(如何理解)和扫描缓冲池,查找属于这个表空间的页面,在一个有庞大的缓冲池的服务器上做这个操作时非常慢的,如果打算删除很多的innodb表并且用了innodb_file_per_table,可能会从percona server包含的一个修复中获益,它可以让服务器慢慢地清理掉属于被删除表的页面,只需要设置innodb_lazy_drop_table这个选项。
什么是最终建议,我们建议使用innodb_file_per_table并且给共享表空间设置大小范围,这样可以过得舒服点