から小さなデータセット上のすべての選択:これまでのところの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
テーブルには、希望するdevise_id
の約20000エントリがあります。私はこのPostgreSQLのクラッシュを再現することができませんでした
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
:しかし、返すために1つのAPIコールは、すべての20000のエントリのPostgresは、次のエラーメッセージを表示してシャットダウンを得ました。
ただし、ユニコーンは30秒後にタイムアウトするように設定されています。このエンドポイントをテストすると、応答時間が若干長くなることがあるので、unicorn worker
がkillされ、もう1つがunicorn masterによって開始されます。 データベースのアクセスには数ミリ秒かかりますが、ルビーハッシュのすべてのデータのフォーマットにはほとんどの時間がかかります。
ここで、なぜpostgresqlサーバーがクラッシュしたのか、そしてこれを防ぐ方法を理解したいと思います。 psqlでは20000エントリはほとんどありません。 これは一度しか登場しますが、私はそのように維持したいと思います;)
スタック:9.3.13
- はpsql(PostgreSQLの)5.1.0
- のRails 4.2.7
- ルビー2.3.0