在没有分区的情况下优化庞大的mysql表上的表

时间:2012-06-09 04:28:49

标签: mysql

我们有一个非常庞大的Mysql表,它是MyISAM。每当我们运行optimize table命令时,表都会被锁定并且性能会受到影响。该表不是只读的,因此创建临时表并交换它们可能无法解决。我们也无法对表格进行分区。

是否有其他方法/工具可以在不降低性能的情况下实现优化表功能。任何建议都会有很大的帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html

  

对于InnoDB表,OPTIMIZE TABLE映射到ALTER TABLE,其中   重建表(...)

因此,我不希望切换到InnoDB有任何改进,正如Quassnoi可能暗示的那样。

根据定义,OPTIMIZE TABLE需要对表进行一些独占访问,因此在OPTIMIZE'ation期间性能下降

尽管如此,可能需要采取一些措施来减少OPTIMIZE所需的时间,具体取决于您的表格“巨大”:

  • 如果您的表有很多字段,那么您的表可能需要进行规范化。相反,您可能希望通过将列扩展到几个“更窄”的表中来对表进行反规范化,并建立一对一的关系。
  • 如果您的表有很多记录,请在您的应用程序代码中实现“手动”分区。一个简单的步骤是创建一个“存档”表,其中包含很少更新的记录。这样,您只需要优化较小的记录集(非归档表)。

答案 1 :(得分:0)

优化表命令锁定表,它会降低性能。

您下载percona工具包命令以优化表格。

此命令在优化表期间不锁定表。

使用以下链接:

https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html