Windows 上 MySQL 的奇怪行为(简单查询 CPU 100%)

Windows 上 MySQL 的奇怪行为(简单查询 CPU 100%)

我们在 Windows 2019 服务器(Dell R420、32 核、64GB、Raid10 上的 SSD)上运行 MySQL 8。我们的网站时不时会完全离线,因为 MySQL 服务器上的 CPU 完全处于瓶颈状态(CPU 100%)。

经过一番调查,我们发现这些查询堆积起来并且需要很长时间才能返回结果:

SELECT count(id)
FROM g3hy2_usergroups

这是一个非常简单的查询。它只返回该表上的用户组数。该表是 InnoDB,其表大小只有 80kB。

当我们手动运行此查询时,返回结果需要 0.037 秒,但在我们运行(例如)第 40 次之后,我们遇到了“错误”,并且需要永远返回结果(它实际上会永远运行,我怀疑直到达到 MySQL 超时)。

我不知道这是 MySQL 错误还是我们的数据库有问题或者是其他我们想不到的问题。

但我们希望有更深知识的人能给我们提示,以便我们能够朝着正确的方向前进,并更进一步解决这个问题。

顺便说一句,这不是硬件问题,因为我们已经尝试了不同的服务器,结果相同。

谢谢亚历克斯

答案1

一些可能有帮助的复合索引:

g3hy2_social_stream_item: INDEX(target_id, context_type, d.created)
g3hy2_social_stream_item: INDEX(target_id, created)
g3hy2_social_stream_item: INDEX(verb, context_type, created, context_id)
g3hy2_content:  INDEX(cat_id, id)

这似乎毫无用处;如果可以的话,请摆脱它:

JOIN  g3hy2_jreviews_content as jc  ON c.id = jc.content

尝试使用以下命令将其移至派生表中UNION

    GROUP BY  p.listing_id
    ORDER BY  p.created DESC
    LIMIT  20;

也就是说,尝试做LIMIT 加入cjc。这应该会降低这些连接的成本。

如果你成功完成上述任务,则将这 3 行移到 中SELECTUNION参见http://mysql.rjweb.org/doc.php/index_cookbook_mysql#或

关于40份的摊位...它或许您有 40 个此查询的副本同时运行,并且它们相互干扰 - 共享 32 个核心。我上面的评论希望使查询运行得足够快,以防止高速公路拥堵。

EXPLAIN可能有助于分析。)

相关内容