監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關(guān)閉

避免阻塞 保障數(shù)據(jù)庫性能

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件

雖然說SQL Server數(shù)據(jù)庫本身提供了很好的鎖管理機制。但是,從某一方面來說,其實數(shù)據(jù)庫只是一些客戶端應(yīng)用程序的“傀儡”。這主要是因為客戶端應(yīng)用程序?qū)Ψ?wù)器上獲取的鎖幾乎有完全的控制能力??蛻舳藨?yīng)用程序發(fā)出的查詢請求以及對結(jié)果的處理方式,往往具有直接的控制能力。所以,如果應(yīng)用程序在設(shè)計上稍有不合理的情況時,就會因為鎖機制而導(dǎo)致阻塞。

如當(dāng)遇到如下幾種情形時,就可能會導(dǎo)致阻塞情況的發(fā)生。

一、客戶端取消查詢后沒有回滾實務(wù)。

查詢是大部分應(yīng)用程序經(jīng)常發(fā)生的作業(yè)。但是,用戶通過前臺客戶端應(yīng)用程序查詢后臺數(shù)據(jù)庫時,有時候往往會因為各種原因取消查詢。如用戶打開查詢窗口后,因為死機或者用戶覺得反映速度慢強制取消查詢。但是,當(dāng)客戶端取消查詢時,若沒有加上回滾事務(wù)的語句,則此時,因為用戶已經(jīng)向服務(wù)器發(fā)送了查詢請求,所以,后臺數(shù)據(jù)庫中所涉及的表,都已經(jīng)加L上了鎖。故即使用戶取消查詢后,所有在事務(wù)內(nèi)獲取的鎖都將會保留。此時,若其他用戶也需要查詢這些表或者用戶重新打開查詢窗口想通過輸入查詢條件來提高系統(tǒng)響應(yīng)速度時,就會發(fā)生阻塞的現(xiàn)象。

二、客戶端沒有及時取得所有查詢的結(jié)果。

通常情況下,用戶將查詢請求發(fā)送到服務(wù)器之后,前臺應(yīng)用程序必須立即完成提取所有結(jié)果行。如果應(yīng)用程序沒有提取所有結(jié)果行的話,就會產(chǎn)生一個問題。因為只要應(yīng)用程序沒有及時提取所有結(jié)果,鎖可能會留在表上而阻塞其他用戶。既然應(yīng)用程序已經(jīng)將SQ語句遞交給服務(wù)器,則該應(yīng)用程序就必須提取所有的結(jié)果行。若應(yīng)用程序不遵循這個原則的話(如因為一時疏漏而沒有配置),就無法從根本上解決阻塞問題。

三、查詢執(zhí)行時間過長。

有些查詢會耗用比較長的時間。如因為查詢語句設(shè)計不合理或者查詢設(shè)計到的表與記錄比較多時,都會使得查詢的執(zhí)行時間加長。如有時候用戶需要對紀錄進行Update或者Delete操作時,如果涉及的行比較多時,就會獲取很多的鎖。這些鎖無論是否最終升級到表鎖,都會阻塞其他查詢。

故通常情況下,不要將長時間運行的決策支持查詢和聯(lián)機事務(wù)處理查詢混在一起。

當(dāng)數(shù)據(jù)庫遇到阻塞時,往往需要檢查應(yīng)用程序遞交的SQL語句本身,以及檢查與連接管理、所有結(jié)果行的處理等有關(guān)的應(yīng)用程序行為。通常情況下,為了避免因鎖沖突所導(dǎo)致的阻塞,筆者有如下建議。

建議一:查詢完成后提取所有的結(jié)果行。

有些應(yīng)用程序為了提高用戶查詢的響應(yīng)速度,會有選擇的提取所需要的記錄。這個“小聰明”看起來很合理,但是,卻會造成更大的浪費。因為查詢結(jié)果沒有及時提取的話,鎖就不能釋放。當(dāng)其他人查詢數(shù)據(jù)時,就會發(fā)生阻塞。

所以,筆者建議在應(yīng)用程序設(shè)計時,對于數(shù)據(jù)庫中查詢的記錄要及時的提取??梢酝ㄟ^其他方式,如添加查詢條件、或者后臺查詢的方式,來提高查詢的效率。同時,在應(yīng)用程序?qū)用嬖O(shè)置合理的緩存,也可以非常明顯的提高查詢效率。

建議二:在事務(wù)執(zhí)行時不要讓用戶輸入內(nèi)容。

雖然在事務(wù)執(zhí)性的過程中,可以讓用戶參與進來,以提高互動性。但是,我們數(shù)據(jù)庫管理員往往不建議這么做。因為若要用戶在事務(wù)執(zhí)行過程中輸入?yún)?shù),會延長事務(wù)的執(zhí)行時間。雖然人比較聰明,但是其反應(yīng)速度仍然沒有電腦那么快。所以,在執(zhí)行過程中加入讓用戶參與的過程,會延長事務(wù)的等待時間。故除非有特殊的需要,不要在應(yīng)用程序的執(zhí)行過程中,提醒用戶輸入?yún)?shù)。一些事務(wù)執(zhí)行必須的參數(shù),最好在事先就提供。如可以通過變量等預(yù)先把需要的參數(shù)傳入進去。

建議三:使事務(wù)盡可能的簡短。

筆者認為,數(shù)據(jù)庫管理員應(yīng)該把一些問題簡單化。當(dāng)某個需求需要很多SQL語句才能夠完成時,不妨把任務(wù)進行分解。同時,也把事務(wù)分解成一些簡短的事務(wù)。

如數(shù)據(jù)庫中一張產(chǎn)品信息表,其記錄數(shù)量有二百萬條。現(xiàn)在處于管理的需要,把一次性更改其中的一百五十萬條記錄時。若通過一個事務(wù)進行更改,則其時間會比較長。若其中還牽涉到級聯(lián)更新的話,則時間會更長。

針對這種情況,我們就可以學(xué)著把事務(wù)簡短話。如這個產(chǎn)品信息中,可能有產(chǎn)品類型字段。那么在更新數(shù)據(jù)時,我們能否不一次性進行更新。而是通過產(chǎn)品類別字段進行控制,對記錄進行分次更新的。如此每個類別的更新事務(wù)所耗用的時間就可能會大大縮短。如此雖然操作的時候,會需要多個步驟。但是,往往可以有效避免阻塞情況的發(fā)生,提高數(shù)據(jù)庫的性能。

建議四:子查詢與列表框,最好不要同時使用。

有時候在應(yīng)用程序設(shè)計的時候,通過列表框確實可以提高用戶輸入的速度與準(zhǔn)確率,但是,若前臺應(yīng)用程序沒有緩存機制的話,往往會造成阻塞。

如在一個訂單管理系統(tǒng)中,可能需要頻繁的輸入銷售代表。為了用戶輸入的方便,銷售代表往往設(shè)計成一個列表框。每次需要輸入時,前臺應(yīng)用程序都會從后臺中進行查詢銷售代表信息(如果應(yīng)用程序沒有涉及緩存)。一方面,子查詢的速度本來就比較慢;其次,列表框會生成長時間運行的查詢。這兩個方面碰在一起,就可能導(dǎo)致應(yīng)用程序提高運行時間過程的查詢。從而對其他用戶的查詢,如系統(tǒng)管理員需要維護用戶信息,而造成阻塞。

所以,在應(yīng)用程序設(shè)計時,子查詢最好少用。而子查詢與列表框同時使用,更需要禁止。若避免不了的話,則要在應(yīng)用程序中實現(xiàn)緩存機制。如此的話,應(yīng)用程序需要銷售代表信息的時候,就會從應(yīng)用程序緩存中取得,而不會每次都去查詢數(shù)據(jù)庫。

同時,可以在這個列表框中設(shè)計“重新查詢”功能。當(dāng)用戶信息有變更,如系統(tǒng)管理員加入了一個新的銷售代表。在沒有進行重新查詢之前,由于應(yīng)用程序是從自身的緩存中取得數(shù)據(jù),所以沒有剛更新的內(nèi)容。此時,用戶就需要運行重新查詢功能,讓前臺應(yīng)用程序重新從數(shù)據(jù)庫中查詢信息。這種設(shè)計,就可以提高列表框與子查詢的執(zhí)行時間,有效避免阻塞問題。

建議五:在取消查詢時設(shè)置回退事務(wù)。

前臺應(yīng)用程序設(shè)計時,應(yīng)該允許用戶臨時改變主意,取消查詢。如用戶查詢所有產(chǎn)品信息時,可能會覺得響應(yīng)時間比較長,難以忍受。此時,他們就會想到取消查詢。在這種情況下,應(yīng)用程序設(shè)計時就需要設(shè)計一個取消查詢按鈕。用戶可以在查詢的過程中隨時點擊這個按鈕取消查詢。同時,在這個按鈕事件中,需要注意加入一個回滾命令。讓數(shù)據(jù)庫服務(wù)器能夠及時對相關(guān)記錄或者表進行解鎖。

同時最好能夠采用鎖或者查詢超時機制。這主要是因為,有時候大量查詢也會耗費用戶主機的大量資源,而導(dǎo)致客戶機死機。此時,若能夠采用查詢或者鎖超時機制,即在查詢超時過后,數(shù)據(jù)庫服務(wù)器自動對相關(guān)對象進行解鎖。這也是數(shù)據(jù)庫管理員需要跟程序開發(fā)人員協(xié)商的一個問題。

另外,對數(shù)據(jù)庫連接采取顯式控制、在所預(yù)計的并發(fā)用戶全負荷下對應(yīng)用程序進行承受能力測試、使用邦定連接、對每個查詢使用查詢超時與鎖超時等等,這些手段都可以有效避免鎖沖突產(chǎn)生的阻塞。當(dāng)數(shù)據(jù)庫管理員發(fā)現(xiàn)有阻塞的癥狀時,可以從這些方面出發(fā),尋找解決的措施。

從以上的分析中可以看出,SQL Server數(shù)據(jù)庫鎖是一把雙刃劍。其在保障數(shù)據(jù)庫數(shù)據(jù)一致性的同時,也會給數(shù)據(jù)庫造成一些負面影響。如何把這些負面影響降到最低,就是我們數(shù)據(jù)庫管理員的任務(wù)。在應(yīng)用程序設(shè)計時,遵循如上建議,可以有效解決因鎖問題產(chǎn)生的阻塞問題,提高數(shù)據(jù)庫的性能??梢?,要從根本上解決阻塞問題,需要數(shù)據(jù)庫管理人員與程序開發(fā)人員共同努力。(IT專家網(wǎng))

發(fā)布:2007-04-21 13:55    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
哈爾濱OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普哈爾濱OA軟件行業(yè)資訊其他應(yīng)用

哈爾濱OA軟件 哈爾濱OA新聞動態(tài) 哈爾濱OA管理信息化 哈爾濱OA快博 哈爾濱OA軟件行業(yè)資訊 哈爾濱軟件開發(fā)公司 哈爾濱門禁系統(tǒng) 哈爾濱物業(yè)管理軟件 哈爾濱倉庫管理軟件 哈爾濱餐飲管理軟件 哈爾濱網(wǎng)站建設(shè)公司