技术译文 | MySQL 与主流分支版本上执行 ANALYZE TABLE 安全么?

作者:Przemysław Malkowski

本文来源:https://www.percona.com/blog/,封面由 DELL-3 生成,爱可生开源社区翻译。

本文约 1400 字,预计阅读需要 3 分钟。


有时,需要使用 ANALYZE TABLE[1] 命令手动更新表和索引统计信息。在不进一步探讨这种需求的原因的情况下,我想就与在生产系统上运行命令相关的开销来聊聊这个话题。然而,这里讨论的开销与深入表行收集统计信息的通常成本无关,我们可以通过设置样本页数[2] 来控制。

五年前,我的同事 Sveta 发布了一篇不错的博客文章[3],介绍了 Percona Server for MySQL 中引入的一项改进,以解一些不必要的等待:

《ANALYZE TABLE 不再是阻塞操作》[4]

从历史上看,在 MySQL 中运行 ANALYZE TABLE 命令的问题是查询需要在表的表定义缓存条目上使用排他锁。这使得查询等待任何长时间运行的查询完成,但也可能触发级联等待其他传入请求。简而言之,ANALYZE 可能会导致高负载生产环境中出现较高得延时。

从那时起,MySQL/Percona/MariaDB 都发生了一些变化,但今天仍然存在许多生产系统会受影响的版本。让我们回顾一下这些年来情况的演变。

1MySQL