出于某种原因,当我运行 mysqltuner 时,我的 MySQL 服务器中的所有 InnoDB 表都被列为碎片。我几个小时前才安装了服务器(在 OSX Lion 上),它有一堆从批处理文件中导入的新数据。
我尝试将一个数据库中的所有表都转换为 MYISAM,果然碎片表的数量下降了。奇怪的是,一旦我将这些表转换回 InnoDB,碎片表的数量就会再次激增。这与我迄今为止的研究相反,它表明运行ALTER TABLE table_name ENGINE=INNODB;
应该修复碎片。
经过一番谷歌搜索后,我跑了:
SELECT table_schema, table_name, data_free/1024/1024 AS data_free_MB
FROM information_schema.tables
WHERE engine LIKE 'InnoDB' AND data_free > 0
Run Code Online (Sandbox Code Playgroud)
据说它列出了所有碎片表(它确实返回与 mysqltuner 输出的碎片表计数相同数量的结果)。每个条目在data_free_MB
列中都具有完全相同的数字(当前为 7.00000000)。
这实际上是一个真正的问题还是 mysqltuner 做错了什么?如果这是一个问题,我该如何解决?
编辑
我越来越怀疑我是个白痴,7MB 的碎片是针对整个文件的,而不是针对每个表的。任何人都可以确认是否会出现这种情况?
mysql ×1