成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

在SQL Server數(shù)據(jù)庫中如何減少死鎖發(fā)生

瀏覽:18日期:2023-11-05 08:15:42
這篇論壇文章(賽迪網(wǎng)技術(shù)社區(qū))主要針對(duì)SQL Server數(shù)據(jù)庫死鎖現(xiàn)象的預(yù)防及解決措施進(jìn)行了詳細(xì)的介紹,更多內(nèi)容請(qǐng)大家參考下文:

死鎖是指在某組資源中,兩個(gè)或兩個(gè)以上的線程在執(zhí)行過程中,在爭奪某一資源時(shí)而造成互相等待的現(xiàn)象,若無外力的作用下,它們都將無法推進(jìn)下去,死時(shí)就可能會(huì)產(chǎn)生死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖線程。簡單的說,進(jìn)程A等待進(jìn)程B釋放他的資源,B又等待A釋放他的資源,這樣互相等待就形成死鎖。

如在數(shù)據(jù)庫中,如果需要對(duì)一條數(shù)據(jù)進(jìn)行修改,首先數(shù)據(jù)庫管理系統(tǒng)會(huì)在上面加鎖,以保證在同一時(shí)間只有一個(gè)事務(wù)能進(jìn)行修改操作。如事務(wù)1的線程 T1具有表A上的排它鎖,事務(wù)2的線程T2 具有表B上的排它鎖,并且之后需要表A上的鎖。事務(wù)2無法獲得這一鎖,因?yàn)槭聞?wù)1已擁有它。事務(wù)2被阻塞,等待事務(wù)1。然后,事務(wù)1需要表B的鎖,但無法獲得鎖,因?yàn)槭聞?wù)2將它鎖定了。事務(wù)在提交或回滾之前不能釋放持有的鎖。因?yàn)槭聞?wù)需要對(duì)方控制的鎖才能繼續(xù)操作,所以它們不能提交或回滾,這樣數(shù)據(jù)庫就會(huì)發(fā)生死鎖了。

如在編寫存儲(chǔ)過程的時(shí)候,由于有些存儲(chǔ)過程事務(wù)性的操作比較頻繁,如果先鎖住表A,再鎖住表B,那么在所有的存儲(chǔ)過程中都要按照這個(gè)順序來鎖定它們。如果無意中某個(gè)存儲(chǔ)過程中先鎖定表B,再鎖定表A,這可能就會(huì)導(dǎo)致一個(gè)死鎖。而且死鎖一般是不太容易被發(fā)現(xiàn)的。

如果服務(wù)器上經(jīng)常出現(xiàn)這種死鎖情況,就會(huì)降低服務(wù)器的性能,所以應(yīng)用程序在使用的時(shí)候,我們就需要對(duì)其進(jìn)行跟蹤,使用sp_who和sp_who2來確定可能是哪些用戶阻塞了其他用戶,我們還可以用下面的存儲(chǔ)過程來跟蹤具體的死鎖執(zhí)行的影響:

create procedure sp_who_lockasbegindeclare @spid int,@bl int,@intTransactionCountOnEntry int,@intRowcount int,@intCountProperties int,@intCounter int create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint) IF @@ERROR<>0 RETURN @@ERROR insert into #tmp_lock_who(spid,bl) select 0 ,blocked from (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid) union select spid,blocked from sysprocesses where blocked>0 IF @@ERROR<>0 RETURN @@ERROR -- 找到臨時(shí)表的記錄數(shù) select @intCountProperties = Count(*),@intCounter = 1 from #tmp_lock_who IF @@ERROR<>0 RETURN @@ERROR if @intCountProperties=0 select '現(xiàn)在沒有阻塞和死鎖信息' as message-- 循環(huán)開始while @intCounter <= @intCountPropertiesbegin-- 取第一條記錄 select @spid = spid,@bl = bl from #tmp_lock_who where id = @intCounter begin if @spid =0 select '引起數(shù)據(jù)庫死鎖的是: '+ CAST(@bl AS VARCHAR(10)) + '進(jìn)程號(hào),其執(zhí)行的SQL語法如下' else select '進(jìn)程號(hào)SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '進(jìn)程號(hào)SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其當(dāng)前進(jìn)程執(zhí)行的SQL語法如下' DBCC INPUTBUFFER (@bl ) end -- 循環(huán)指針下移 set @intCounter = @intCounter + 1enddrop table #tmp_lock_whoreturn 0end

我們只需要通過在查詢分析器里面執(zhí)行sp_who_lock,就可以具體捕捉到執(zhí)行的堵塞進(jìn)程,這時(shí)我們就可以對(duì)對(duì)應(yīng)的SQL語句或者存儲(chǔ)過程進(jìn)行性能上面的改進(jìn)及設(shè)計(jì)。

所以我們?cè)跀?shù)據(jù)庫設(shè)計(jì)的時(shí)候,雖然不能完全避免死鎖,但可以使死鎖的數(shù)量盡量減少。增加事務(wù)的吞吐量并減少系統(tǒng)開銷,因?yàn)橹挥泻苌俚氖聞?wù),所以就得遵循下面的原則:

按同一順序訪問對(duì)象

如果所有并發(fā)事務(wù)按同一順序訪問對(duì)象,則發(fā)生死鎖的可能性會(huì)降低。在寫SQL語句或存儲(chǔ)過程的時(shí)候,就需要按照順序在兩個(gè)并發(fā)事務(wù)中先獲得表A上的鎖,然后獲得表B上的鎖,當(dāng)?shù)谝粋€(gè)事務(wù)完成之前,另一個(gè)事務(wù)被阻塞在表A上。第一個(gè)事務(wù)提交或回滾后,第二個(gè)事務(wù)繼續(xù)進(jìn)行,而不能在語句里面寫先獲得表B上的鎖,然后再獲得表A的鎖。

避免事務(wù)中的用戶交互

避免編寫包含用戶交互的事務(wù),因?yàn)檫\(yùn)行沒有用戶交互的批處理的速度要遠(yuǎn)遠(yuǎn)快于用戶手動(dòng)響應(yīng)查詢的速度,例如答復(fù)應(yīng)用程序請(qǐng)求參數(shù)的提示。例如,如果事務(wù)正在等待用戶輸入,而用戶就去做別的事了,則用戶將此事務(wù)掛起使之不能完成。這樣將降低系統(tǒng)的吞吐量,因?yàn)槭聞?wù)持有的任何鎖只有在事務(wù)提交或回滾時(shí)才會(huì)釋放。即使不出現(xiàn)死鎖的情況,訪問同一資源的其它事務(wù)也會(huì)被阻塞,等待該事務(wù)完成。

保持事務(wù)簡短并在一個(gè)批處理中

在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個(gè)需要長時(shí)間運(yùn)行的事務(wù)時(shí)通常發(fā)生死鎖。事務(wù)運(yùn)行時(shí)間越長,其持有排它鎖或更新鎖的時(shí)間也就越長,從而堵塞了其它活動(dòng)并可能導(dǎo)致死鎖。保持事務(wù)在一個(gè)批處理中,可以最小化事務(wù)的網(wǎng)絡(luò)通信往返量,減少完成事務(wù)可能的延遲并釋放鎖。

使用低隔離級(jí)別

確定事務(wù)是否能在更低的隔離級(jí)別上運(yùn)行。執(zhí)行提交讀允許事務(wù)讀取另一個(gè)事務(wù)已讀取(未修改)的數(shù)據(jù),而不必等待第一個(gè)事務(wù)完成。使用較低的隔離級(jí)別(例如提交讀)而不使用較高的隔離級(jí)別(例如可串行讀)可以縮短持有共享鎖的時(shí)間,從而降低了鎖定爭奪。

使用綁定連接

使用綁定連接使同一應(yīng)用程序所打開的兩個(gè)或多個(gè)連接可以相互合作。次級(jí)連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會(huì)相互阻塞。

下面有一些對(duì)死鎖發(fā)生的一些建議:

(1)對(duì)于頻繁使用的表使用集簇化的索引;

(2)設(shè)法避免一次性影響大量記錄的T-SQL語句,特別是INSERT和UPDATE語句;

(3)設(shè)法讓UPDATE和DELETE語句使用索引;

(4)使用嵌套事務(wù)時(shí),避免提交和回退沖突;

(5)對(duì)一些數(shù)據(jù)不需要及時(shí)讀取更新值的表在寫SQL的時(shí)候在表后臺(tái)加上(nolock),如:Select * from tableA(nolock)

標(biāo)簽: Sql Server 數(shù)據(jù)庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产黄色成人av| 久久久精品国产免大香伊| 日韩欧美国产精品一区| 天天色综合天天| 国产亚洲综合精品| 亚洲精品欧美综合四区| 亚洲日韩成人| 亚洲精品午夜久久久| 91久久视频| 亚洲三级在线免费| 激情偷拍久久| 国产精品白丝在线| 亚洲小说欧美另类社区| 亚洲欧美自拍偷拍| 在线国产欧美| 亚洲美女屁股眼交| 99在线|亚洲一区二区| 亚洲啪啪综合av一区二区三区| 午夜精品剧场| 国产精品久久久久三级| 亚洲国产清纯| 亚洲国产美国国产综合一区二区| 先锋影音国产精品| 蜜臀91精品一区二区三区| 在线精品视频免费观看| 久久精品国产亚洲a| 91精品一区二区三区久久久久久 | 91精品国产欧美一区二区成人| 国内外成人在线视频| 欧美一区二区大片| 91原创在线视频| 国产精品卡一卡二| 国产+成+人+亚洲欧洲自线| 欧美成va人片在线观看| 99精品国产热久久91蜜凸| 国产精品天干天干在观线| 亚洲国产日韩欧美一区二区三区| 亚洲精品中文字幕乱码三区| 欧美亚洲一区二区三区| 丝瓜av网站精品一区二区| 色成年激情久久综合| 免费成人在线观看| 日韩一级黄色大片| 色综合网色综合| 亚洲欧美日韩中文播放| 久久精品一二三区| 国产主播一区二区| 久久久久久久性| 亚洲久久一区| 首页国产丝袜综合| 欧美一区二区视频观看视频| 91网站最新地址| 亚洲激情图片qvod| 欧美三级一区二区| 91小视频在线| 亚洲成人免费看| 欧美日韩国产精选| 欧美粗暴jizz性欧美20| 亚洲综合另类小说| 欧美高清视频www夜色资源网| av亚洲精华国产精华精华| 亚洲手机成人高清视频| 色成人在线视频| 成人在线视频一区| 亚洲视频网在线直播| 欧美在线综合视频| 成人一区二区三区| 亚洲精品欧美激情| 欧美影院午夜播放| 99久久夜色精品国产网站| 亚洲免费成人av| 91九色最新地址| av激情综合网| 一区二区国产盗摄色噜噜| 欧美日韩免费一区二区三区| 99久久99久久精品国产片果冻 | 日韩va欧美va亚洲va久久| 欧美成人福利视频| 国产欧美日韩中文久久| 亚洲高清av| 国产呦萝稀缺另类资源| 17c精品麻豆一区二区免费| 欧美精品日韩精品| 亚洲精品日韩在线观看| 韩国毛片一区二区三区| 亚洲欧美区自拍先锋| 欧美男女性生活在线直播观看| 国产综合婷婷| 久久99久久久欧美国产| 中文字幕一区在线观看| 欧美三级中文字| 在线日韩av永久免费观看| 国产一区二三区| 一区二区三区国产| 26uuu国产日韩综合| 一本色道综合亚洲| 午夜久久福利| 国模大尺度一区二区三区| 亚洲精品国产精华液| 日韩一区二区在线观看视频 | 可以看av的网站久久看| 99精品欧美一区二区三区小说| 午夜精品福利一区二区三区蜜桃| 欧美sm极限捆绑bd| 日本道色综合久久| 99综合在线| 99re热这里只有精品免费视频| 婷婷亚洲久悠悠色悠在线播放| 久久久精品蜜桃| 欧美日韩五月天| 99视频一区| 91在线精品一区二区| 视频在线观看91| 国产精品久久久久9999吃药| 91精品国产一区二区三区蜜臀| 亚洲一区二区三区涩| 欧美日韩精品一区| 国产成人午夜精品5599 | 亚洲日本乱码在线观看| 日韩欧美一区二区免费| 久久久久久一区二区| 亚洲激情精品| 99精品久久只有精品| 国模大尺度一区二区三区| 婷婷国产在线综合| 综合久久给合久久狠狠狠97色| 欧美一区二区三区免费观看视频 | 亚洲三级影院| 91在线观看污| 国产精品亚洲第一区在线暖暖韩国| 五月天中文字幕一区二区| 亚洲天堂福利av| 欧美激情综合五月色丁香小说| 日韩一区二区电影网| 欧美伊人精品成人久久综合97| 国产模特精品视频久久久久| 欧美色欧美亚洲另类七区| 国产麻豆一精品一av一免费 | 亚洲免费观看高清完整版在线观看熊| 精品国产91久久久久久久妲己 | 亚洲精品在线网站| 91精品国产91热久久久做人人| 91黄色免费网站| 亚洲欧美清纯在线制服| 国产综合自拍| 色综合天天在线| 成人国产精品免费| 成人性视频免费网站| 国产精品一卡二| 国产真实乱对白精彩久久| 蜜臀国产一区二区三区在线播放| 亚洲午夜激情网页| 亚洲激情图片一区| ●精品国产综合乱码久久久久| 亚洲国产精品v| 2020国产精品自拍| 日韩色在线观看| 日韩一级二级三级精品视频| 欧美精品日韩一本| 欧美三区免费完整视频在线观看| 久久久久久九九九九| 国产精品毛片| 一本色道久久| 一区二区福利| 亚洲精品中文字幕在线| 亚洲大胆在线| 一区二区av| 免费久久久一本精品久久区| 性8sex亚洲区入口| 午夜在线精品| 一本色道久久综合精品竹菊| 老司机午夜免费精品视频| 国产精品一区毛片| aa日韩免费精品视频一| 亚洲欧洲一级| 极品中文字幕一区| 136国产福利精品导航网址| 99www免费人成精品| 亚洲国产精品第一区二区| 亚洲理伦在线| 国产精品视频福利| 一本色道久久综合狠狠躁的推荐| 色婷婷av一区二区三区大白胸| 久久亚洲一区| 亚洲一区二区三区精品动漫| 亚洲在线一区| 色悠悠亚洲一区二区| 欧美婷婷六月丁香综合色| 欧美日本在线播放| 欧美一区二区久久久| 日韩精品中文字幕一区二区三区| 欧美精品一区二区不卡| 久久久美女毛片| 欧美国产日韩亚洲一区| 综合久久一区二区三区| 亚洲综合自拍偷拍| 日本成人在线不卡视频| 国产精品一区二区无线| 欧美成人在线免费观看| 亚洲高清不卡一区|