我有一个非常大的表(~50 to ),并定期从表中清除行,我希望运行OPTIMIZE TABLE来恢复空间。但是我没有足够的空间去运行它。如果我运行它,服务器将挂起,必须被杀死并重新启动,表被损坏,必须进行修复。我和我一起做的。
在MySQL文档,我读到了以下内容:
若要合并碎片行并消除删除或更新行所造成的浪费空间,请在恢复模式下运行myisamchk : shell> myisamchk -r tbl_name,您可以使用
OPTIMIZE TABLE语句以相同的方式优化表。OPTIMIZE TABLE进行表修复和密钥分析,并对索引树进行排序,以使键查找速度更快。在实用程序和服务器之间也不可能发生不必要的交互,因为当您使用OPTIMIZE TABLE时,服务器完成了所有的工作。
这是否意味着myisamchk -r -a -S与OPTIMIZE TABLE做同样的事情?
如果他们做同样的事情,为什么myisamchk工作,但OPTIMIZE TABLE耗尽空间?
发布于 2015-07-01 18:48:29
他们做同样的事情,但有区别和严重的危险。
以下是不同之处:
OPTIMIZE TABLE是在mysql客户机或mysql会话中完成的。myisamchk是一个实用程序,而不是一个客户机。因此,没有表锁定安全措施。因此,您不应该在活动系统中运行myisamchk -r -a -S。否则,您可能会很快(实际上是瞬间)损坏MyISAM表。您可以将MyISAM表移动到另一个文件夹,并对表文件运行myisamchk,而不受mysqld或其任何客户端连接的干扰。
其他差异
更多信息
执行OPTIMIZE TABLE将完成表的完整副本。它会在引擎盖下这样做
ALTER TABLE mytable ENGINE=MyISAM;
ANALYZE TABLE mytable;执行OPTIMIZE TABLE可以使临时表在/tmp中,而不是像myisamchk那样到位
请记住,tmpdir是映射到某个地方的。那就是空间可能会释放的地方。
https://dba.stackexchange.com/questions/105702
复制相似问题