gpt4 book ai didi

postgresql - Heroku 上慢得离谱的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 13:03:46 27 4
gpt4 key购买 nike

我在 Heroku 上运行 Rails 3 应用程序,并使用 NewRelic 来监控性能。每隔几个小时,我就会看到查询速度非常慢的报告,这对我来说毫无意义。

例如,我有一个包含年、月和日列的事件表(现在考虑这个,它可能不是最有效的设计,但无论如何我认为它不应该如此严重地减慢查询速度) .该表在 4 列上建立索引(user_id、年、月、日 - 按天排序)。

NewRelic 显示数据库需要 3.2 来运行以下查询。我不知道为什么,因为整个表只有大约 6k 行,而我的整个应用程序平均每分钟只处理 5.67 个请求。

我在这里缺少什么吗?也许是因为我只在一个网络测功机上,而那个测功机要 sleep 了?如果是这样,为什么 NewRelic 会将其报告为慢速 SQL 查询?

SELECT `events`.* FROM `events` WHERE `events`.`user_id` = 5308 AND `events`.`year` = 2014 AND `events`.`month` = 1 ORDER BY day ASC

这是查询的 SQL EXPLAIN:

 Query plan Sort (cost=20.50..20.50 rows=11 width=89)   
Query plan Sort Key: day
Query plan -> Bitmap Heap Scan on events (cost=2.08..20.46 rows=11 width=89)
Query plan Recheck Cond: ((user_id = 5308) AND (year = 2014) AND (month = 1))
Query plan -> Bitmap Index Scan on index_events_on_user_id_and_year_and_month_and_day (cost=0.00..2.08 rows=11 width=0)
Query plan Index Cond: ((user_id = 5308) AND (year = 2014) AND (month = 1))

最佳答案

New Relic 报告的不仅仅是在数据库服务器上运行查询所需的时间。报告的是更广泛的测量。它包括通过 ActiveRecord 准备查询、通过线路将查询发送到数据库服务器、执行查询、通过线路从数据库服务器接收响应以及将响应解析回 ActiveRecord 中的一组 Ruby 对象所花费的时间。

通常,在数据库服务器上实际执行查询所花费的时间将主导此测量,但并非总是如此。影响测量时间的因素有很多种,任何堆栈级别的延迟都会影响报告的时间。

关于postgresql - Heroku 上慢得离谱的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21153363/

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