【问题标题】:"Waiting for table flush" Against Analyze Command“等待表刷新”反对分析命令
【发布时间】:2022-09-24 16:50:22
【问题描述】:

我试图在 900 个表中的一个表上运行分析命令mysql 5.7.30.它卡住了我的所有数据库进程列表,并且连接立即激增,并且找到了许多带有状态的命令\"等待表刷新\"甚至我们的 max_connection 参数也达到了 2500。我们正在运行过去 3 年的分析表命令,但从过去 1 个月开始,我们第 4 次注意到这个问题。如果我们不分析我们的表,那么我们会看到严重的性能问题并且许多查询进入状态“统计”。你对此有何看法

  • 你从ANALYZE 中得到了什么?听起来像OPTIMIZE 表,应该不是在 InnoDB 上使用。
  • 表没有性能问题,查询有。让我们看看其中一个慢查询(和SHOW CREATE TABLE)可能有一种简单的方法来加快它。
  • 当我们定期分析表时,大多数情况下我们的查询都能完美运行。它在数据库优化中非常普遍。
  • 他们最终会完全停止运行吗? (其他供应商可能比 MySQL 更需要这种形式的维护。)

标签: mysql database-locking


【解决方案1】:

您绝对不应该定期或自动运行 ANALYZE。听起来您在躲避queries stuck in the waiting for able flush state 的子弹,纯粹是因为您的服务器上的负载足够低,以至于您之前没有注意到它。只有当您有明确、明确的证据表明该表上的索引统计信息与现实充分分离以导致查询优化器定期提出非常糟糕的执行计划时,您才应该谨慎地在该表上运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2011-10-20
    • 2023-03-24
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多