2016-12-08 36 views
0

全部選擇在一個小數據集我在我的Rails應用程序以下端點:Postgres的服務器關機ActiveRecord的查詢

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。但一個API調用返回的所有條目20000個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的崩潰。

但獨角獸設置爲在30秒後超時。測試這個端點,有時候這個響應會稍微延長一點,所以unicorn worker會被殺死,而另一個則是由獨角獸主人啓動的。 (我在設計,實現階段沒有考慮到這一點,我將盡快更改爲某些分區) 數據庫訪問需要幾毫秒,但格式化紅寶石哈希中的所有數據需要大部分時間。

我現在想了解爲什麼postgresql服務器崩潰以及如何防止這種情況。 psql幾乎沒有20000個條目。 這隻會出現一次,但我想保持這種方式;)

堆棧:

  • PSQL(PostgreSQL系統)9.3.13
  • 麒麟5.1.0
  • 的Rails 4.2.7
  • 的Ruby 2.3.0

回答

0

這可能是矯枉過正你,但因爲我們有被殺的過程和PostgreSQL SER的幾種情況正在進入恢復模式並取消所有其他會話等。我們安裝了pgbouncer進行連接池。通過這種方式,數據庫可以屏蔽許多這些情況。