1. 程式人生 > >奇怪的SQLServer“超時已過期”及“不存在或拒絕訪問”錯誤

奇怪的SQLServer“超時已過期”及“不存在或拒絕訪問”錯誤

最近有個多執行緒程式,連線本機SQLServer 2008,大概300個連線,跑一會自己寫的日誌中就會出現“超時已過期”錯誤,或者出現“不存在或拒絕訪問”錯誤。奇怪在於,程式開啟後肯定有聯通過,是在過一會兒才會出現這樣的錯誤。

SQLServer日誌中,和windows事件簿中沒有看到任何有價值的資訊。

首先,不會有多個執行緒使用到同一個TADOConnection的狀況;表的索引也建立了,單個查詢不會超過1秒。

繼續,發現錯誤出現在開啟程式30秒左右時,於是試著調整TADOCOnnection/TADOCOmmand/TADODataSet的TimeOut值,調成120秒,還是不行,還是在開啟程式30秒左右出錯。

SQLServer允許連線數是0,無限制,再調整SQLServer本身的連線/命令超時時間,還是一樣的無效。鬱悶。

程式本身有問題嗎?把問題簡單化吧,寫一個小的測試程式,開300個執行緒,執行緒中建立TADOConnection/TADODataSet,對同一個資料庫的同一個表查詢,新增,沒有出錯,即使開到600個執行緒也不會出錯。看來也不是SQLServer不夠強,再鬱悶。

Google了無數資料,有說資料庫檔案或日誌檔案增長方式設定問題,導致增長時超時。不限制日誌增長,試過還是不行。

SQLServer的客戶端,伺服器的網路配置中也沒有看出問題。

..........

..........

最後,無意中把連線字串中的“Data Source=.”改成了計算機名,居然就可以了。奇怪的是,改成本機IP:192.168.3.33居然連線不上。難道是DNS問題?