【发布时间】:2016-12-08 15:12:47
【问题描述】:
我的 rails 应用程序中有以下端点:
def index
if params.key?(:start)
if params[:start].to_i.to_s == params[:start] #unix epoche time format
p = Param
.where(devise_id: params[:devise_id])
.where('"TimeStamp" >= ?', Time.at(params[:start].to_i))
.order('created_at DESC')
else
raise Exceptions::RequestError, '...'
end
end
到目前为止一切顺利。 params 表有大约 20000 个条目用于所需的 devise_id。但是一个返回所有 20000 个条目的 api 调用 postgres 被关闭并显示以下错误消息:
2016-12-08 12:22:58 CET LOG: server process (PID 16510) was terminated by signal 9: Killed
2016-12-08 12:22:58 CET DETAIL: Failed process was running: SELECT COUNT(*) FROM "params" WHERE "params"."devise_id" = $1
2016-12-08 12:22:58 CET LOG: terminating any other active server processes
我无法重现这个 postgresql 崩溃。
但是,unicorn 设置为在 30 秒后超时。测试这个端点,有时响应需要稍长一些,所以unicorn worker 被杀死,另一个由独角兽主人启动。
(我在设计、实施阶段没有考虑到这一点,我将很快将其更改为一些分区)
数据库访问需要几毫秒的时间,但在 ruby 哈希中格式化所有数据需要大部分时间。
我现在想了解 postgresql 服务器崩溃的原因以及如何防止这种情况发生。 20000 个条目对于 psql 来说几乎是零。 这只出现过一次,但我想保持这种状态;)
堆栈:
- psql (PostgreSQL) 9.3.13
- 独角兽5.1.0
- Rails 4.2.7
- Ruby 2.3.0
【问题讨论】:
标签: ruby-on-rails postgresql ruby-on-rails-4 postgresql-9.3