2014-12-05 86 views
2

我們在rails 3.2.12(ruby 1.9.3)上運行ruby on rails應用程序,並使用當前tinyTDS gem 0.6.2。TinyTds錯誤:Adaptive Server連接超時

我們使用MS SQL 2012或2014,更通常然後面向以下錯誤消息:

TinyTds::Error: Adaptive Server connection timed out: EXEC sp_executesql [...] 

數據庫自動關閉關閉。 TCP套接字超時是默認的Windows系統。

應用程序服務器在機器#1(Windows服務器)上,SQL服務器在機器#2(Windows服務器)上。

當我檢查連接(netstat)時,我已經爲大約20-30個用戶打開了250個連接。 我運行perform.exe來查看SQL服務器上數據和日誌磁盤的空閒時間。

database.yml有連接pool:32reconnect:true

對我來說,它看起來像tinyTDS失去了連接,並防止任何異常重新連接。

問題是,如何調試問題以找出問題所在?

UPDATE

我的錯誤,原來的錯誤消息屬於tinytDS 0.5.x.由於我更新到最新版本,我得到以下錯誤的補充或替代:

ActiveRecord::LostConnection (TinyTds::Error: DBPROCESS is dead or not enabled: BEGIN TRANSACTION): 
+0

另外,你編譯的FreeTDS版本是什麼? – MetaSkills 2014-12-05 12:54:40

+0

例如,運行「tsql -C」將顯示系統在大多數情況下具有的功能。 – MetaSkills 2014-12-05 12:55:48

+0

我沒有自己安裝tinyTDS,我在窗口上使用了「gem install tinytds」。 – YvesR 2014-12-06 14:32:39

回答

3

首先,該池大小似乎過多。你在使用很多線程嗎?如果沒有,那麼每個應用程序請求/響應將只使用一個連接。看起來這個價值是高的。

二,什麼SQL超時?你發現某些SQL比別人慢嗎?如果是這樣,那麼你有兩個選擇。第一種方法是使用索引等標準實踐來調整數據庫。第二種方法是增加database.yml中的「超時」選項。默認的超時時間是5000秒,即5秒。你有沒有試過將它設置爲10000?我想我問的是你怎麼確定這是一個「連接」超時與「等待」超時?

+0

我們使用瘦服務器,在那裏我們運行其中的兩個,一個在端口3101上,另一個在端口3102上,前端是處理負載均衡器的apache。我們有一些問題,production.log建議我們增加連接池,這就是爲什麼這麼高。關於連接超時:沒有特殊的sql可以創建連接超時,非常簡單或複雜的連接超時,它只是有時會發生超時,連接,而不是查詢超時。 Timeoutset已經設置爲10000。 – YvesR 2014-12-06 14:34:29

+0

需要提一下,我們在線程模式下運行瘦。 – YvesR 2014-12-06 14:55:28

+0

有沒有可能與您聯繫? – YvesR 2014-12-09 20:07:09