由于某些原因,当我运行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
它应该列出所有碎片表(对于碎片表计数,它确实返回与mysqltuner输出相同数量的结果)。列中的每个条目均具有完全相同的编号data_free_MB
(当前为7.00000000)。
这实际上是一个真正的问题,还是mysqltuner做错了什么?如果有问题,该如何解决?
编辑
我越来越怀疑我是个白痴,而7MB的碎片是针对整个文件的,而不是针对每个表的。任何人都可以确认是否会这样吗?
[!!] Total fragmented tables: 2314
,我非常确定这表示一个问题(带有红色的双感叹号)