我希望在大型生产MySQL数据库(V5.0)上运行ANALYZE和优化表,以提高性能。
但是,由于这会导致停机时间未知,所以我想先在一个单独的实例上测试它。我想在测试数据库上运行一些测试查询,然后优化它,然后再运行测试查询。
复制MySQL数据库同时保持表和索引数据未经优化的物理存储是可能的吗?
发布于 2016-01-15 01:45:48
不是的。不要期望使用OPTIMIZE TABLE提高性能(如果有的话)。
ANALYZE TABLE在MyISAM上速度很慢,你应该远离它的引擎。它在InnoDB中速度很快。这是几乎从来不需要在任何一个引擎。只有当您有一个无法由人进行理性分析的特定查询时,您才应该考虑ANALYZE。
OPTIMIZE TABLE将重建表。这需要在持续时间内阻止对它的所有写入。
回到你的最后一个问题。转储数据(而不是文件)将为您提供一些可以加载到另一台服务器进行测试的东西。然而,转储本身涉及某种程度的锁定。这取决于您正在使用的引擎以及是否需要“一致”转储。
SHOW TABLE STATUS会给你一个关于Data_free的线索。对于MyISAM来说,这就是OPTIMIZE可以收回多少空间。但即便是大量的数据也不一定意味着业绩的大幅提升。对于InnoDB,Data_free的意义较小,其意义取决于创建表时innodb_file_per_table的值。
发布于 2016-02-01 15:00:08
如果您的表是无害的,您可以使用https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html,这将优化表而不阻塞它。
它以块的形式将表复制到aovid锁中,并设置触发器,以便在优化时发生的所有更改中更新复制表。
您可以运行干式运行,以确保它的工作之前,做它的现场。
https://dba.stackexchange.com/questions/126273
复制相似问题