0
我試圖找出一個奇怪的錯誤的原因,這一整天。Rails:SQL查詢讓生產服務器永遠掛起
我有一個模型,這行代碼(由控制器操作調用):
# it always works
self.deliveries.create(subscriptions.pluck('DISTINCT endpoint').collect {|e| {endpoint: e}})
一切正常(我的本地計算機上,在生產服務器上,甚至上千交付)。
爲了提高性能我更換了原始的SQL上述行:
# it hangs forever on the production server if you have many deliveries
inserts = subscriptions.pluck('DISTINCT endpoint').collect do |e|
"(#{self.id}, #{ActiveRecord::Base::sanitize(e)})"
end
ActiveRecord::Base.connection.execute("INSERT INTO deliveries (notification_id, endpoint) VALUES #{inserts.join(', ')}")
此作品在我的本地機器上如預期甚至數千交付。然而,在我的生產服務器(2GB RAM/2核心)這第二個版本只適用於當我有幾個記錄插入,否則與2000交付或請求永遠掛起。
爲了更精確:
- 瀏覽器沒有得到迴應和HTTP請求掛起永遠
- 的交付在數據庫
- 以下行保存
execute
永遠不會執行
如果我使用第三個版本的代碼,並使用activerecord-import替換原始SQL,我會得到完全相同的錯誤。
什麼可以導致此錯誤?
我甚至想知道它是否可以是崩潰應用程序(我使用logz.io)生成的長輸出消息(大sql查詢)。
你爲什麼涉及的Rails在這呢?一個簡單的'insert into ... select ...'SQL位將是一個更好的起點,不是嗎? –