【问题标题】:Postgres server shutdown from simple select all on a small dataset from ActiveRecord queryPostgres 服务器从 ActiveRecord 查询的小数据集上的简单全选关闭
【发布时间】: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


    【解决方案1】:

    这对你来说可能有点过头了,但由于我们有几个被杀死的进程和 postgresql 服务器进入恢复模式并取消所有其他会话等的案例。我们安装了 pgbouncer 用于连接池。这样数据库就可以避免很多这样的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多