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