在mysqltuner推荐之后,我成功地运行了mysqlcheck --optimize --all-databases (所有的表都报告了“注意:表不支持优化,而是重新创建+分析”和“状态:确定”),但是我的表仍然是支离破碎的。我运行了这个查询:
SELECT engine,
table_name,
ROUND(data_length/1024/1024) AS data_length,
ROUND(index_length/1024/1024) AS index_length,
ROUND(data_free/1024/1024) AS data_free
FROM information_schema.tables;发现我的桌子还有一半是零碎的。其中一些甚至超过100%的片段(即data_free > data_length + index_length)。为什么它们仍然是零碎的,我如何确保碎片整理而不重新创建整个数据库?
ibdata1只有82 MB (整个DB > 100 GB),我已经设置了innodb_file_per_table = on。我还在一个表上尝试了ALTER TABLE schema_name.table_name ENGINE=InnoDB;,以检查mysqlcheck是否出错,但这并没有明显改变文件大小。
运行MariaDB 5.5。
发布于 2017-03-14 21:24:30
您可以重新创建表,也可以使用“优化表”命令重新生成表。强烈建议备份以防万一。
https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-storage-layout.html https://mariadb.com/kb/en/mariadb/optimize-table/
https://dba.stackexchange.com/questions/163028
复制相似问题