乙個在實際專案中隱藏了八年的BUG

2021-09-24 17:29:50 字數 1183 閱讀 4032

在八年前的乙個資料庫同步專案中,專案的目標是將資料庫a中的資料同步到資料庫b中。這個程式在工作了八年以後一直都沒有問題,但是使用者卻反應資料庫同步效率越來越慢。

筆者開始以為是資料庫容易變大,正常的效能降低,後來仔細調查了一番發現問題又不是那麼簡單。因為資料庫在轉換時,經常在轉換過程**問題,而且出問題的位置是隨機的。舉例來說,比如id為325239的訂單在同步時會卡住,設定斷點除錯時,卻又正常通過!在程式的錯誤中,最難以解決的就是帶有隨機性的問題。

經過仔細觀察,發現卡住的並行數量最大為5,即最多同時會有5條資料被卡住。但是給出的異常卻是「遠端連線拒絕」,這個問題卡了我好幾天。經過不懈努力,終於發現,原來問題出在的資料庫操作類中乙個函式,其**如下:

/// 

/// 返回資料集。

///

///

public

dataset

getdataset

(string commandtext,

string connectionstring)

return

null

;}

問題的根本原因是資料連線沒有關閉!而且在使用的時候,由於操作並不頻繁,所以採用的是每次都開啟和關閉連線的操作,同時又設定了延時120秒後沒有關閉會自動關閉。但是正是因為沒有手工關閉,所以每次資料操作完後都有120秒的延時。之前資料庫並沒有對連線進行限制,現在限制數設定為5。所以才造成了現在資料同步卡頓。在實際專案中,由於每天需要同步的資料不大,只有約100條左右的資料,所以最壞的情況下也就是120*100 = 120,00秒,即3個多小時的同步時間。而工作人員可以接受的延時是24小時,所以這麼多年倒也可以正常工作。

根據吉德林法則,找到了真實原因問題已經解決了一半(這次可以說找到問題就基本解決了),修改進來就不難,只需要加入關閉**,問題終於得到了解決。**如下:

(ps:dataset還有乙個不錯的特性就是它是離線資料,即關閉資料庫鏈結以後仍然保持已有資料)。

/// 

/// 返回資料集。

///

///

public

dataset

getdataset

(string commandtext,

string connectionstring)

return ds;

}

乙個老婆的八年總結的心得

size 18 乙個老婆的八年總結的心得 size 1.結婚前要看準產品的特性,不是看他的相貌權勢地位,而是性情。萬一沒看準,也不能輕易退貨,需要你自己在生活的過程中不斷清洗,擦拭,修理。2.不要相信 情人眼裡出西施 的話,而要相信 老婆永遠是別人的好 這是亙古不變的名言,別妄想在你身上出現奇蹟。3...

乙個奮鬥了八年的人給的忠告

1 努力 工作要努力,隨隨便便過日子過四五年也是過,稍微努力的過四五年也是過,努力的過四五年也是過,何不努力好好的幹。如果努力的過好畢業後的四五年,這對我們以後的人生非常有幫助。2 虛心學習 多與比自己大的人 長輩 成功人士交流學習,要虛心聽取 認真分析他們的意見和建議,以免自己以後走彎路。3 自由...

在專案中解決的乙個死鎖問題

描述 finance 系統 呼叫 process 系統的時候發生死鎖。用 show processlist 可以看到存在status是 updating 的程序,而該程序就是發生了死鎖的sql。分析 問題產生的原因是 finance 系統在事務a中update了一條資料,並且這條資料已被加行鎖 pr...