0

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

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

提前致谢。

4

2 回答 2

0

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

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

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

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

不过,可能需要采取一些措施来减少 OPTIMIZE 所花费的时间,具体取决于您的表如何“巨大”:

  • 如果您的表有很多字段,则您的表可能需要进行规范化。相反,您可能希望通过将列分散到几个“更窄”的表中来对表进行非规范化,并建立一对一的关系。
  • 如果您的表有很多记录,请在您的应用程序代码中实现“手动”分区。一个简单的步骤是创建一个保存很少更新记录的“存档”表。这样您只需要优化一组较小的记录(非归档表)。
于 2012-06-09T10:13:29.160 回答
0

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

你下载 percona 工具包命令来优化表。

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

使用以下链接:

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

于 2015-08-05T09:32:05.053 回答