【发布时间】:2014-12-14 16:22:34
【问题描述】:
我遇到了一个奇怪的问题,在登台服务器上测试了一些新功能后,我决定将它们移到生产环境中。两台服务器上的数据库完全相同。
我正在运行这段代码:
def an_action
search_start = Time.now
@a1 = Time.now
@results = find_hotels
@a2 = Time.now
@b1 = Time.now
@results[:hotels].uniq_by {|x| x["hotel_name"]}.each do |result|
@markers << "...saving some data..."
end
@b2 = Time.now
search_end = Time.now # search started
@total_time = search_end - search_start
end
private
def find_hotels
@hotels = Hotel.includes(:services).within(distance, origin: city).where('nonstop = ?', 0).order("distance ASC")
return {:hotels => @hotels}
end
在视图中,我打印出我在控制器动作中测量的时间:
<div>
Hotels: <%= @results[:hotels].count %>,
Markers: <%= @markers.count %>,
A: <%= @a2-@a1 %>,
B: <%= @b2-@b1 %>,
Total: <%= @total_time %>
</div>
现在问题来了:
暂存服务器:
Hotels: 476,
Markers: 342,
A: 0.254782386,
B: 0.863244492,
Total: 1.118588403
生产服务器:
Hotels: 476,
Markers: 342,
A: 20.257541647,
B: 0.422051075,
Total: 20.679673465
本地主机:
Hotels: 476,
Markers: 342,
A: 0.84956,
B: 2.98855,
Total: 3.83876
生产服务器和登台服务器是相同的(只有登台有大约 10GB 大的磁盘空间)。我认为问题可能出在 MySQL 索引上,但在两台服务器上,加载时间是相同的(大约 0.90 秒)。
为什么生产服务器上的加载时间如此之长?我什至不知道从哪里开始寻找问题,我以前从未遇到过这个问题。
我的本地主机也比登台服务器慢,但没有生产服务器那么慢。
提前感谢你们的时间。
【问题讨论】:
-
1st) 丑陋的代码,但对于测试来说可能没问题... 2nd) 你需要问一些更具体的问题。这可以是从数据库中的数据量到分配给 MySQL 的 RAM 的任何内容。您需要对内存进行概要分析。也许安装 perf 工具并更新问题。 askubuntu.com/questions/50145/…
标签: mysql ruby-on-rails ruby performance activerecord