通過C#查詢SQLServer數據庫超時

生產環境的系統,在查詢數據的時候,日誌記錄數據“Timeout 時間已到。在操作完成之前超時時間已過或服務器未響應。”,“等待的操作過時”等,初步判斷是因爲查詢超時導致的,根據源碼分析,獲取到查詢操作的SQL腳本,然後跟蹤到查詢業務的SQL參數信息,在數據庫中查詢,發現數據的返回時間小於1s,基本上是實時返回,排除了鎖表等操作。
後更改數據查詢的超時時間,改成3分鐘,系統還是報查詢超時。但是程序在測試環境,反覆的測試,也沒有問題;而且程序昨天是正常的,數據量也沒有出現暴增的情況,整體的數據量也不大。
後通過網絡查詢,發現有重啓服務器解決該問題的方法,但是由於是生成環境,沒法進行重啓服務器,客戶在等,很是着急。後在通過萬能的網絡,查詢到,可能是參數化傳參導致的,傳遞參數的SqlDbType和數據庫裏的類型不一致會導致出現數據庫上直接查詢,返回數據很快,但是通過程序去查詢,會出現查詢超時的情況。然後去檢查程序和數據庫,發現確實不一致,程序中使用的是SqlDbType.VarChar,但是在數據庫存儲中使用的數據類型是NVarChar。
然後修改程序的SQL語句不是參數化傳參,改爲拼接的方式,然後發佈程序,登錄檢測,發現程序正常返回數據,這樣看來,問題就出現在C#程序中的參數化的參數類型和數據庫中的類型不一致導致的。
這個Bug,是個隱藏的Bug,問題不會一直出現,因爲程序中這樣操作的,不僅僅是這個查詢的一處地方。這次的問題比較特殊,做個記錄,以備下次查詢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章