【发布时间】:2017-05-25 15:28:00
【问题描述】:
我有一个带有名为 Sensor Registry 的模型的 Rails 5 应用程序。
它目前有大约 160,000 条记录,但我在尝试显示这些数据时遇到了极短的加载时间。
应用程序在双核 Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz 和 2GB RAM 上运行。
服务器日志显示如下:
于 2017-01-10 23:43:41 +0000 开始为 187.220.30.180 获取“/sensor_registries”
无法从 187.220.30.180 渲染控制台!允许的网络:127.0.0.1、::1、127.0.0.0/127.255.255.255
ActiveRecord::SchemaMigration 加载 (1.2ms) SELECT "schema_migrations".* FROM "schema_migrations"
由 SensorRegistriesController#index 处理为 HTML 在 layouts/application 中渲染 sensor_registries/index.html.erb
SensorRegistry 负载 (604.0ms) SELECT "sensor_registries".* FROM "sensor_registries"
传感器负载 (0.6ms) SELECT "sensors".* FROM "sensors" WHERE "sensors"."id" IN (49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 , 60, 65, 61, 63, 64, 62)
在布局/应用程序中渲染 sensor_registries/index.html.erb (54663.9ms) 在 55468 毫秒内完成 200 OK(查看次数:54827.7 毫秒 | ActiveRecord:611.5 毫秒)
我摆脱了 N+1 问题,但我想知道我是否可以对数据库查询做更多的事情。
反正问题似乎是在渲染页面的那一刻,处理它大约需要 54 秒。
有没有办法优化 CPU 使用率?
什么是加快流程并以足够快的速度向用户显示数据的最佳解决方案?
【问题讨论】:
-
如果没有具体的应用知识,这是一个很难回答的问题。但是,您需要分析您的操作并查看可以改进慢速部分的地方。 NewRelic 和 RequestProfiler/KCachegrind 这样的工具对这类事情很有用。
-
我只是想知道为什么需要显示 160k 条记录,以及用户如何在一个巨大的滚动页面上查看所有这些记录。
-
你能发布控制器并查看源代码吗?
-
通常,这是一个与代码相关的问题,您应该检查视图上是否调用了 n+1 个查询,或者可以避免的代码重复
标签: ruby-on-rails ruby postgresql