我刚刚切换了我的Wordpress数据库来使用InnoDB引擎。
在使用MyISAM时,我经常运行Optimize和Repair table。然而,在InnoDB中,这些方法不起作用。
我手动运行了OPTIMIZE TABLE和建议的ALTER TABLE,但它们都没有消除开销。我在服务器上运行了mysqltuner,其中显示了14个零碎的表--总共有14个表。即使在运行optimize和alter tables之后,所有14个表仍然是支离破碎的!
如何正确地使用OPTIMIZE和REPAIR InnoDB表?
发布于 2012-08-27 15:47:07
哎哟,你把innodb_file_per_table关掉了
我以前写过这方面的文章。您必须转换InnoDB基础结构。
Oct 29, 2010:我在StackOverflow的原稿Apr 01, 2012:是无辜的_文件_每_合适的桌子?Mar 25, 2012:为什么InnoDB将所有数据库存储在一个文件中?Feb 03, 2012:MySQL InnoDB中表的调度优化Nov 26, 2011:HY000 &表用户_分析充分文件中第6308行的错误1114一旦您这样做,无论何时您对表进行优化到InnoDB,它实际上都会缩小。
如果不执行InnoDB基础设施清理,ibdata1文件的大小实际上会增加。更糟糕的是,我认为mysqltuner.pl正在使用一种奇怪的算法来确定InnoDB碎片。我倾向于忽略它。
我以不同的方式检查碎裂。
回到2012年4月19日,我回答了一个类似的问题:如何从InnoDB表中删除碎片?。
下面是我在前面那篇文章中说过的话:
在运行上述步骤之后,如何确定哪些表需要碎片整理?这是可能的,但你会有脚本它。下面是一个示例:假设您有表
mydb.mytable。启用innodb_file_per_table后,文件/var/lib/mydb/mytable.ibd必须从OS中检索两个数字文件大小:您可以从操作系统中确定文件大小,比如ls /var/lib/mydb/mydb/mytable.ibd awk '{print $5}‘来自INFORMATION_SCHEMA的文件大小:您可以从以下information_schema.tables中确定文件大小:从information_schema.tables中选择(data_length+index_length) tblsize =’mydb‘和table_name='mytable';只需从OS值中减去INFORMATION_SCHEMA值,然后将差异除以INFORMATION_SCHEMA值。
从那里你将决定有多大的百分比认为有必要拆除那张表。换句话说,如果.ibd文件的文件大小与来自INFORMATION_SCHEMA.TABLES的数字有很大的差异,那么继续使用OPTIMIZE TABLE。不管文件大小如何,如果碎片小于1%,请不要担心。
https://dba.stackexchange.com/questions/23206
复制相似问题