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