日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
減少SQLServer數(shù)據(jù)庫(kù)死鎖的方法

如果兩個(gè)用戶(hù)進(jìn)程分別鎖定了不同的資源,接著又試圖鎖定對(duì)方所鎖定的資源,就會(huì)產(chǎn)生死鎖。此時(shí),SQL Server將自動(dòng)地選擇并中止其中一個(gè)進(jìn)程以解除死鎖,使得另外一個(gè)進(jìn)程能夠繼續(xù)處理。系統(tǒng)將回退被中止的事務(wù),并向被回退事務(wù)的用戶(hù)發(fā)送錯(cuò)誤信息。

布爾津網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,布爾津網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為布爾津上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的布爾津做網(wǎng)站的公司定做!

大多數(shù)設(shè)計(jì)良好的應(yīng)用都會(huì)在接收到這個(gè)錯(cuò)誤信息之后重新提交該事務(wù),此時(shí)提交成功的可能性是很大的。但是,如果服務(wù)器上經(jīng)常出現(xiàn)這種情況,就會(huì)顯著地降低服務(wù)器性能。為避免死鎖,設(shè)計(jì)應(yīng)用應(yīng)當(dāng)遵循一定的原則,包括:

◆讓?xiě)?yīng)用每次都以相同的次序訪(fǎng)問(wèn)服務(wù)器資源。

◆在事務(wù)期間禁止任何用戶(hù)輸入。應(yīng)當(dāng)在事務(wù)開(kāi)始之前收集用戶(hù)輸入。

◆盡量保持事務(wù)的短小和簡(jiǎn)單。

◆如合適的話(huà),為運(yùn)行事務(wù)的用戶(hù)連接指定盡可能低的隔離級(jí)別。[適用于6.5,7.0,2000]

此外,對(duì)于SQL Server的死鎖問(wèn)題,下面是幾則實(shí)踐中很有用的小技巧。

◆使用SQL Server Profiler的Create Trace Wizard運(yùn)行“Identify The Cause of a Deadlock”跟蹤來(lái)輔助識(shí)別死鎖問(wèn)題,它將提供幫助查找數(shù)據(jù)庫(kù)產(chǎn)生死鎖原因的原始數(shù)據(jù)。[適用于7.0,2000]

◆如果無(wú)法消除應(yīng)用中的所有死鎖,請(qǐng)確保提供了這樣一種程序邏輯:它能夠在死鎖出現(xiàn)并中止用戶(hù)事務(wù)之后,以隨機(jī)的時(shí)間間隔自動(dòng)重新提交事務(wù)。這里等待時(shí)間的隨機(jī)性非常重要,這是因?yàn)榱硪粋€(gè)競(jìng)爭(zhēng)的事務(wù)也可能在等待,我們不應(yīng)該讓兩個(gè)競(jìng)爭(zhēng)的事務(wù)等待同樣的時(shí)間,然后再在同一時(shí)間執(zhí)行它們,這樣的話(huà)將導(dǎo)致新的死鎖。[適用于6.5,7.0,2000]

◆盡可能地簡(jiǎn)化所有T-SQL事務(wù)。此舉將減少各種類(lèi)型的鎖的數(shù)量,有助于提高SQL Server應(yīng)用的整體性能。如果可能的話(huà),應(yīng)將較復(fù)雜的事務(wù)分割成多個(gè)較簡(jiǎn)單的事務(wù)。[適用于6.5,7.0,2000]

◆所有條件邏輯、變量賦值以及其他相關(guān)的預(yù)備設(shè)置操作應(yīng)當(dāng)在事務(wù)之外完成,而不應(yīng)該放到事務(wù)之內(nèi)。永遠(yuǎn)不要為了接受用戶(hù)輸入而暫停某個(gè)事務(wù),用戶(hù)輸入應(yīng)當(dāng)總是在事務(wù)之外完成。[適用于6.5,7.0,2000]

◆在存儲(chǔ)過(guò)程內(nèi)封裝所有事務(wù),包括BEGIN TRANSACTION和COMMIT TRANSACTION語(yǔ)句。此舉從兩個(gè)方面幫助減少阻塞的鎖。首先,它限制了事務(wù)運(yùn)行時(shí)客戶(hù)程序和SQL Server之間的通信,從而使得兩者之間的任何消息只能出現(xiàn)于非事務(wù)運(yùn)行時(shí)間(減少了事務(wù)運(yùn)行的時(shí)間)。其次,由于存儲(chǔ)過(guò)程強(qiáng)制它所啟動(dòng)的事務(wù)或者完成、或者中止,從而防止了用戶(hù)留下未完成的事務(wù)(留下未撤銷(xiāo)的鎖)。[適用于6.5,7.0,2000]

◆如果客戶(hù)程序需要先用一定的時(shí)間檢查數(shù)據(jù),然后可能更新數(shù)據(jù),也可能不更新數(shù)據(jù),那么最好不要在整個(gè)記錄檢查期間都鎖定記錄。假設(shè)大部分時(shí)間都是檢查數(shù)據(jù)而不是更新數(shù)據(jù),那么處理這種特殊情況的一種方法就是:先選擇出記錄(不加UPDATE子句。UPDATE子句將在記錄上加上共享鎖),然后把它發(fā)送給客戶(hù)。

如果用戶(hù)只查看記錄但從來(lái)不更新它,程序可以什么也不做;反過(guò)來(lái),如果用戶(hù)決定更新某個(gè)記錄,那么他可以通過(guò)一個(gè)WHERE子句檢查當(dāng)前的數(shù)據(jù)是否和以前提取的數(shù)據(jù)相同,然后執(zhí)行UPDATE。

類(lèi)似地,我們還可以檢查記錄中的時(shí)間標(biāo)識(shí)列(如果它存在的話(huà))。如果數(shù)據(jù)相同,則執(zhí)行UPDATE操作;如果記錄已經(jīng)改變,則應(yīng)用應(yīng)該提示用戶(hù)以便用戶(hù)決定如何處理。雖然這種方法需要編寫(xiě)更多的代碼,但它能夠減少加鎖時(shí)間和次數(shù),提高應(yīng)用的整體性能。[適用于6.5,7.0,2000]

◆盡可能地為用戶(hù)連接指定具有最少限制的事務(wù)隔離級(jí)別,而不是總是使用默認(rèn)的READ COMMITTED。為了避免由此產(chǎn)生任何其他問(wèn)題,應(yīng)當(dāng)參考不同隔離級(jí)別將產(chǎn)生的效果,仔細(xì)地分析事務(wù)的特性。[適用于6.5,7.0,2000]

◆使用游標(biāo)會(huì)降低并發(fā)性。為避免這一點(diǎn),如果可以使用只讀的游標(biāo)則應(yīng)該使用READ_ONLY游標(biāo)選項(xiàng),否則如果需要進(jìn)行更新,嘗試使用OPTIMISTIC游標(biāo)選項(xiàng)以減少加鎖。設(shè)法避免使用SCROLL_LOCKS游標(biāo)選項(xiàng),該選項(xiàng)會(huì)增加由于記錄鎖定引起的問(wèn)題。[適用于6.5,7.0,2000]

◆如果用戶(hù)抱怨說(shuō)他們不得不等待系統(tǒng)完成事務(wù),則應(yīng)當(dāng)檢查服務(wù)器上的資源鎖定是否是導(dǎo)致該問(wèn)題的原因。進(jìn)行此類(lèi)檢查時(shí)可以使用SQL Server Locks Object: Average Wait Time (ms),用該計(jì)數(shù)器來(lái)度量各種鎖的平均等待時(shí)間。

如果可以確定一種或幾種類(lèi)型的鎖導(dǎo)致了事務(wù)延遲,就可以進(jìn)一步探究是否可以確定具體是哪個(gè)事務(wù)產(chǎn)生了這種鎖。Profiler是進(jìn)行這類(lèi)具體分析的最好工具。[適用于7.0,2000]

◆使用sp_who和sp_who2(SQL Server Books Online沒(méi)有關(guān)于sp_who2的說(shuō)明,但sp_who2提供了比sp_who更詳細(xì)的信息)來(lái)確定可能是哪些用戶(hù)阻塞了其他用戶(hù)。[適用于6.5,7.0,2000]

◆試試下面的一個(gè)或多個(gè)有助于避免阻塞鎖的建議:1)對(duì)于頻繁使用的表使用集簇化的索引;2)設(shè)法避免一次性影響大量記錄的T-SQL語(yǔ)句,特別是INSERT和UPDATE語(yǔ)句;3)設(shè)法讓UPDATE和DELETE語(yǔ)句使用索引;4)使用嵌套事務(wù)時(shí),避免提交和回退沖突。[適用于6.5,7.0,2000]


網(wǎng)頁(yè)題目:減少SQLServer數(shù)據(jù)庫(kù)死鎖的方法
當(dāng)前鏈接:http://www.dlmjj.cn/article/ccodehj.html