亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL SERVER如何減少死鎖

2019-11-03 08:35:04
字體:
來源:轉載
供稿:網友
 主要針對SQL Server數據庫死鎖現象的預防及解決措施進行了詳細的介紹,更多內容請大家參考下文:
  死鎖是指在某組資源中,兩個或兩個以上的線程在執行過程中,在爭奪某一資源時而造成互相等待的現象,若無外力的作用下,它們都將無法推進下去,死時就可能會產生死鎖,這些永遠在互相等待的進程稱為死鎖線程。簡單的說,進程A等待進程B釋放他的資源,B又等待A釋放他的資源,這樣互相等待就形成死鎖。
  如在數據庫中,如果需要對一條數據進行修改,首先數據庫管理系統會在上面加鎖,以保證在同一時間只有一個事務能進行修改操作。如事務1的線程 T1具有表A上的排它鎖,事務2的線程T2 具有表B上的排它鎖,并且之后需要表A上的鎖。事務2無法獲得這一鎖,因為事務1已擁有它。事務2被阻塞,等待事務1。然后,事務1需要表B的鎖,但無法獲得鎖,因為事務2將它鎖定了。事務在提交或回滾之前不能釋放持有的鎖。因為事務需要對方控制的鎖才能繼續操作,所以它們不能提交或回滾,這樣數據庫就會發生死鎖了。
  如在編寫存儲過程的時候,由于有些存儲過程事務性的操作比較頻繁,如果先鎖住表A,再鎖住表B,那么在所有的存儲過程中都要按照這個順序來鎖定它們。如果無意中某個存儲過程中先鎖定表B,再鎖定表A,這可能就會導致一個死鎖。而且死鎖一般是不太容易被發現的。
  如果服務器上經常出現這種死鎖情況,就會降低服務器的性能,所以應用程序在使用的時候,我們就需要對其進行跟蹤,使用sp_who和sp_who2來確定可能是哪些用戶阻塞了其他用戶,我們還可以用下面的存儲過程來跟蹤具體的死鎖執行的影響:
  
  create PRocedure sp_who_lock
  as
  begin
  declare @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
  
  -- 找到臨時表的記錄數
  select @intCountProperties = Count(*),@intCounter = 1
  from #tmp_lock_who
  IF @@ERROR<>0 RETURN @@ERROR
  if @intCountProperties=0
   select '現在沒有阻塞和死鎖信息' as message
  -- 循環開始
  while @intCounter <= @intCountProperties
  begin
  -- 取第一條記錄
   select @spid = spid,@bl = bl
   from #tmp_lock_who where id = @intCounter
  begin
   if @spid =0
   select '引起數據庫死鎖的是: '+ CAST(@bl AS VARCHAR(10)) + '
  進程號,其執行的SQL語法如下'
  else
   select '進程號SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '
  進程號SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,
  其當前進程執行的SQL語法如下'
  DBCC INPUTBUFFER (@bl )
  end
  -- 循環指針下移
  set @intCounter = @intCounter + 1
  end
  drop table #tmp_lock_who
  return 0
  end
  我們只需要通過在查詢分析器里面執行sp_who_lock,就可以具體捕捉到執行的堵塞進程,這時我們就可以對對應的SQL語句或者存儲過程進行性能上面的改進及設計。
  
  所以我們在數據庫設計的時候,雖然不能完全避免死鎖,但可以使死鎖的數量盡量減少。增加事務的吞吐量并減少系統開銷,因為只有很少的事務,所以就得遵循下面的原則:
  按同一順序訪問對象
  如果所有并發事務按同一順序訪問對象,則發生死鎖的可能性會降低。在寫SQL語句或存儲過程的時候,就需要按照順序在兩個并發事務中先獲得表A上的鎖,然后獲得表B上的鎖,當第一個事務完成之前,另一個事務被阻塞在表A上。第一個事務提交或回滾后,第二個事務繼續進行,而不能在語句里面寫先獲得表B上的鎖,然后再獲得表A的鎖。
  避免事務中的用戶交互
  避免編寫包含用戶交互的事務,因為運行沒有用戶交互的批處理的速度要遠遠快于用戶手動響應查詢的速度,例如答復應用程序請求參數的提示。例如,如果事務正在等待用戶輸入,而用戶就去做別的事了,則用戶將此事務掛起使之不能完成。這樣將降低系統的吞吐量,因為事務持有的任何鎖只有在事務提交或回滾時才會釋放。即使不出現死鎖的情況,訪問同一資源的其它事務也會被阻塞,等待該事務完成。
  保持事務簡短并在一個批處理中
  在同一數據庫中并發執行多個需要長時間運行的事務時通常發生死鎖。事務運行時間越長,其持有排它鎖或更新鎖的時間也就越長,從而堵塞了其它活動并可能導致死鎖。保持事務在一個批處理中,可以最小化事務的網絡通信往返量,減少完成事務可能的延遲并釋放鎖。
  使用低隔離級別
  確定事務是否能在更低的隔離級別上運行。執行提交讀允許事務讀取另一個事務已讀取(未修改)的數據,而不必等待第一個事務完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時間,從而降低了鎖定爭奪。
  使用綁定連接
  使用綁定連接使同一應用程序所打開的兩個或多個連接可以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會相互阻塞。
  下面有一些對死鎖發生的一些建議:
  (1)對于頻繁使用的表使用集簇化的索引;
  (2)設法避免一次性影響大量記錄的T-SQL語句,特別是INSERT和UPDATE語句;
  (3)設法讓UPDATE和DELETE語句使用索引;
  (4)使用嵌套事務時,避免提交和回退沖突;
  (5)對一些數據不需要及時讀取更新值的表在寫SQL的時候在表后臺加上(nolock),如:Select * from tableA(nolock)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品suv精品一区二区| 91精品美女在线| 国内精品一区二区三区四区| 久久全球大尺度高清视频| 日韩中文在线中文网三级| 日本久久久久久| 中文字幕成人精品久久不卡| 久久精品久久精品亚洲人| 日韩最新中文字幕电影免费看| 精品国内产的精品视频在线观看| 色噜噜国产精品视频一区二区| 中文字幕欧美国内| www.日韩免费| 一道本无吗dⅴd在线播放一区| 国产精品久久一| 国产福利精品av综合导导航| 亚洲wwwav| 狠狠色狠色综合曰曰| 国产在线观看精品一区二区三区| 国产成人精品一区二区| 国产视频精品在线| 在线日韩第一页| 成人妇女淫片aaaa视频| 91精品国产99久久久久久| 91视频国产精品| 欧美国产在线电影| 日韩电影中文字幕av| 日韩电影中文字幕一区| 亚洲国产精品久久久| www.欧美视频| 久久久久久成人精品| 久久69精品久久久久久国产越南| 欧美成人免费小视频| 日韩欧美极品在线观看| 91影视免费在线观看| 国产美女搞久久| 国产在线视频不卡| 亚洲视频精品在线| 国产精品久久久久久五月尺| 亚洲福利视频久久| 91极品视频在线| 亚洲精品国产精品乱码不99按摩| 亚洲国产黄色片| 午夜精品久久久久久久久久久久| 色先锋久久影院av| 91麻豆国产语对白在线观看| 欧美视频在线观看免费网址| 欧美精品精品精品精品免费| 精品国产电影一区| 久久久精品一区| 精品亚洲国产成av人片传媒| 国产情人节一区| 亚洲偷熟乱区亚洲香蕉av| 日韩美女在线观看| 亚洲国产精品久久91精品| 国产精品久久色| 欧美xxxx14xxxxx性爽| 国内精品久久久久伊人av| 成人中文字幕在线观看| 久久中国妇女中文字幕| 69影院欧美专区视频| xvideos亚洲人网站| 日韩国产欧美精品在线| 亚洲精品国产美女| 国产91热爆ts人妖在线| 久久久国产精品亚洲一区| 欧美午夜视频一区二区| 91精品国产高清自在线看超| 55夜色66夜色国产精品视频| 成人h猎奇视频网站| 国产91精品在线播放| 欧美巨乳美女视频| 在线观看亚洲区| 成人黄在线观看| 色无极影院亚洲| 欧美日韩色婷婷| 日韩网站免费观看高清| 欧美日韩激情美女| 91精品国产综合久久香蕉的用户体验| 欧美国产精品va在线观看| 日本免费在线精品| 欧美—级a级欧美特级ar全黄| 国产一区二区三区三区在线观看| 久久av红桃一区二区小说| 久久综合88中文色鬼| 中文字幕亚洲专区| 日韩精品中文在线观看| 国产精品久久视频| 亚洲男人天堂网| 91精品久久久久久久久久另类| 成人黄色免费片| 韩国三级电影久久久久久| 久久精品99久久香蕉国产色戒| 国产一区二区三区三区在线观看| 日韩av手机在线观看| 成人欧美一区二区三区黑人| 亚洲精品一区二区三区婷婷月| 精品国产网站地址| 亚洲iv一区二区三区| 欧美激情精品久久久久久变态| 久久精彩免费视频| 这里只有精品在线观看| 欧美日韩国产123| 国产精品老女人视频| 这里只有精品丝袜| 一本色道久久88综合日韩精品| 992tv成人免费影院| 性欧美暴力猛交69hd| 欧美在线视频网| 亚洲视频国产视频| 亚洲精美色品网站| 国产美女久久精品| 久久久国产精品一区| 91人人爽人人爽人人精88v| 91成人国产在线观看| 国产精品久久久久久久久久久不卡| 一区二区三区视频免费在线观看| 亚洲国产小视频在线观看| 亚洲欧洲中文天堂| 国产精品一区二区三区在线播放| 日韩三级成人av网| 亚洲福利视频久久| 亚洲国产日韩欧美在线图片| 久久久999成人| 青草热久免费精品视频| 欧美激情一区二区三级高清视频| 亚洲第一色中文字幕| 一区二区三区四区精品| 日韩中文字幕免费看| 国产精品爽爽ⅴa在线观看| 日本精品久久中文字幕佐佐木| 久久国产精品99国产精| 亚洲三级 欧美三级| 国产精品jvid在线观看蜜臀| 欧美裸体男粗大视频在线观看| 欧美精品成人在线| 中文字幕av日韩| 久久综合伊人77777尤物| 中文字幕国产亚洲2019| 国产精品旅馆在线| 国产一区欧美二区三区| 日韩专区在线观看| 91久久精品国产91久久| 92版电视剧仙鹤神针在线观看| 91国偷自产一区二区三区的观看方式| 欧美人在线观看| 日韩极品精品视频免费观看| 亚洲精品福利在线| 日韩精品在线视频观看| 日韩精品视频中文在线观看| 深夜福利一区二区| 91免费在线视频| 国产精品白丝av嫩草影院| 青青精品视频播放| 国产亚洲欧美日韩精品| 九九热最新视频//这里只有精品| 中国日韩欧美久久久久久久久| 国产精品情侣自拍| 成人国产精品久久久| 国产91精品久久久| 欧美一级视频在线观看| 国产亚洲欧美一区| 亚洲精选一区二区| 国产精品亚洲视频在线观看|