gpt4 book ai didi

mysql - 间歇性缓慢的 Mysql 表 - 为什么?

转载 作者:可可西里 更新时间:2023-11-01 08:08:32 27 4
gpt4 key购买 nike

我们最近遇到了一个我以前从未见过的问题,在大约 3 个小时的时间里,我们的一个 Mysql 表变得非常慢。该表包含论坛帖子,目前大约有 100 万行。变慢的查询在我们的应用程序中很常见:

SELECT * FROM `posts` WHERE (`posts`.forum_id = 1)  ORDER BY posts.created_at DESC LIMIT 1;

我们在 (forum_id, created_at) 上的帖子表上有一个索引,它通常允许在内存中进行此查询和排序。但是,在这三个小时内,并没有那么多。在此时间段内,通常瞬时查询的时间范围为 2 秒至 45 秒。然后恢复正常。

我仔细查看了我们的慢速查询日志,没有其他异常。我看过 New Relic(这是一个 Rails 应用程序),所有其他操作的运行速度基本上与正常情况相同。我们今天没有收到异常数量的消息帖子。我在我们的日志中找不到任何其他奇怪的东西。并且数据库没有交换,当它仍然有数以千计的内存可用时。

我想知道 Mysql 是否可以在给定查询使用哪些索引方面来回改变主意,并且出于某种原因,它今天开始决定对该查询进行全表扫描几个小时?但如果那是真的,为什么它会停止执行全表扫描?

有没有其他人遇到过不合理的间歇性缓慢查询?或者,对于如何调试这样的问题,您有什么创意吗?

最佳答案

我会尝试 MySQL EXPLAIN声明...

EXPLAIN SELECT * FROM `posts` WHERE (`posts`.forum_id = 1)  ORDER BY posts.created_at DESC LIMIT 1;

可能值得在 Rails 代码中检查 MySQL 响应时间,如果它超过阈值,则运行 EXPLAIN 并在某处记录详细信息。

Table locking也浮现在脑海中 - 在 SELECT 进行时,posts 表是否由 cronjob 或大量查询更新?

希望对您有所帮助!

关于mysql - 间歇性缓慢的 Mysql 表 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1253920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com