ruby - Ruby 中的缓存问题
问题描述
我使用 Ruby 构建了我的第一个 Web 应用程序,我注意到在尝试加载每个页面时服务器非常慢。以下行至少重复 10 次:
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE Entreprise Load (0.0ms) SELECT "entreprises".* FROM "entreprises" WHERE "entreprises"."id" = $1 LIMIT $2 [["id", "b50b7beb-7417-4110-b602-660e9ecf067e"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE Entreprise Load (0.0ms) SELECT "entreprises".* FROM "entreprises" WHERE "entreprises"."id" = $1 LIMIT $2 [["id", "b50b7beb-7417-4110-b602-660e9ecf067e"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
[ActionCable] [1299d9c9-e5c9-4e49-b0ff-b986c415eee8] ConferencierChannel stopped streaming from conferencier_channel
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE Entreprise Load (0.0ms) SELECT "entreprises".* FROM "entreprises" WHERE "entreprises"."id" = $1 LIMIT $2 [["id", "b50b7beb-7417-4110-b602-660e9ecf067e"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE Entreprise Load (0.0ms) SELECT "entreprises".* FROM "entreprises" WHERE "entreprises"."id" = $1 LIMIT $2 [["id", "b50b7beb-7417-4110-b602-660e9ecf067e"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "1299d9c9-e5c9-4e49-b0ff-b986c415eee8"], ["LIMIT", 1]]
CACHE Entreprise Load (0.0ms) SELECT "entreprises".* FROM "entreprises" WHERE "entreprises"."id" = $1 LIMIT $2 [["id", "b50b7beb-7417-4110-b602-660e9ecf067e"], ["LIMIT", 1]]
请问我的代码中有设置吗?
解决方案
这个问题似乎是 N+1 查询问题 :)
我认为您的控制器中有此代码;
@entrepies = Entrepry.all
并像这样调用视图;
<% @enrepies.each do |entrepry| %>
<p><%= entrepry.title %></p>
<p>
<% entrepry.users.each do |user| %>
<%= user.name %><br/>
<% end %>
</p>
<% end %>
此代码有 n+1 查询问题(每个 entrepry 对象都从数据库调用用户对象,因为用户不包括 entrepries 查询)。您必须在企业查询中加入或包含用户表。像这样;Entrepry.all.includes(:user)
推荐阅读
- python - 来自 Node.js 的 python-shell 不执行 python 脚本
- google-cloud-platform - 如何使用 GCP 日志监控项目创建
- ios - 在 AppStore Connect 上删除应用程序是否会使其名称再次可供使用?
- java - Spring中的ProxyBeanMethods
- c - 无法在 C 上分配动态数组
- node.js - Express.JS 和 Node-MSSQL 选择错误:任何非 int 值的列名无效
- github - 在 GitHub Markdown 文件中使用 MathJax 时如何禁用自动等式编号?
- sql-server - UPDATE [COLUMN] SET NULL WHERE [COLUMN] = '' - 消息 8114,级别 16,状态 5 将数据类型 varchar 转换为数字时出错
- java - 如何找到给定链表位置的节点?
- python - 如何在函数中调用静态方法?静态方法的范围