Pah*_*iya 17 ruby postgresql ruby-on-rails heroku
在我们的生产环境中,我们注意到Rails应用程序中经常出现峰值(〜每1小时一次).深入挖掘,这是由于以下查询在单个HTTP请求中累计运行> 1.5 s(称为100x).
SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = ?::regclass AND a.attnum > ? AND NOT a.attisdropped
ORDER BY a.attnum
Run Code Online (Sandbox Code Playgroud)
我们没有显式调用该表的代码,但似乎Rails调用它来计算每个模型的属性." 对Rails/Heroku上的Postgres数据库的意外SQL查询 "是相关的.
但不应该被Rails称为非重复性的吗?
我们如何加快速度?
在生产中,每个 Rails 进程都会对其遇到的每个表/模型运行该查询一次。这是每个请求一次rails s,而不是每个请求一次:如果您重复看到它,我会调查您的进程是否由于某种原因频繁重新启动。
要完全消除这些运行时查询,您可以在服务器上生成架构缓存文件:
RAILS_ENV=production rails db:schema:cache:dump
Run Code Online (Sandbox Code Playgroud)
(轨道 4 RAILS_ENV=production bin/rake db:schema:cache:dump:)
该命令将立即执行查询,然后将结果写入缓存文件,未来的 Rails 进程将直接加载该文件,而不是检查数据库。当然,您需要在任何未来的数据库架构更改后重新生成缓存。
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |