【发布时间】:2018-11-19 08:10:06
【问题描述】:
我使用 Rails 5.1.4、Sequel 5.9.0、Postgre、rack-mini-profiler(最新)、sequel-rails 1.0.1。
我正在尝试找出我的应用程序运行缓慢的原因。这是我发现的。
我做了一个简单的查询来获取帖子使用
@posts = Post.all
得到了~150。
我有一个部分来渲染它。这是简化的:
<% @posts.each do |post| %>
<%= post.title %>
<%= post.body %>
<% end %>
当我查看 rack-mini-profiler 的日志时,我看到了
SELECT NULL;
请求会减慢渲染速度,但如果我将 . 方法更改为 :[]:
<% @posts.each do |post| %>
<%= post[:title] %>
<%= post[:body] %>
<% end %>
NULL 查询消失,渲染变得更快。 (title 和 body 都是我数据库中的字段,仅此而已。)
为什么?这是我需要知道的关于续集的事情吗?在这种情况下,我以后不应该使用instance.method,还是我遗漏了什么?
当我尝试来自控制台的请求时,我得到:
> Post.first
D, [2018-06-09T22:46:41.277269 #96772] DEBUG -- : (0.001008s) SELECT NULL
D, [2018-06-09T22:46:41.277952 #96772] DEBUG -- : (0.000362s) SELECT * FROM "posts" LIMIT 1
第一个幻像请求是什么?如何调试和删除它?
【问题讨论】:
-
插件提供心跳以确保数据库连接处于活动状态。 DBM 经常关闭长时间运行的连接以保留可用的登录信息;发生这种情况时,您的应用程序将因连接断开而中断,因此应用程序会定期检查,以保持应用程序运行。您可以重新配置您的 DBM 以不这样做,但通常这是一个坏主意,因为您可以使用所有连接,这可能很糟糕。有心跳是件好事,
select null无需时间处理;这是一种非常标准的处理方式。
标签: ruby-on-rails ruby postgresql sequel sequel-gem