亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

SQL Server 死鎖處理和優化

添加時間:2014-5-6 16:57:34  添加: 思海網絡 
  sql server 鎖類型 
   在數據庫中主要存在兩種鎖: S(共享鎖)和X(排他鎖) 
   
   S(共享鎖):在執行查詢數據時,sql server會將行鎖定,這時只能查詢數據,刪,改被阻塞, 
   
   X(排他鎖):在插入和刪除數據時,將行鎖定,這時增,刪,改都被阻塞 
   
   以上兩種鎖都會引起死鎖: 
   
   死鎖定義:在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現死鎖 
   
   這里模擬一下死鎖環境: 
   
   建立環境: 
  ----死鎖例子,建立表數據 
  create table [dbo].[[zping.com1]]]( 
  A varchar(2) 
  ,B varchar(2) 
  ,C varchar(2)) 
   
  --插入數據 
  insert into [dbo].[[zping.com1]]] 
  select 'a1','b1','c1' 
  union all select 'a2','b2','c2' 
  union all select 'a3','b3','c3' 
   
  --建立表數據 
  create table [dbo].[[zping.com2]]] 
  (D varchar(2) 
  ,E varchar(2)) 
   
   --插入數據 
  insert into [dbo].[[zping.com2]]] 
  select 'd1','e1' 
  union all select 'd2','e2' 
   
   1. 1 排他鎖引起的死鎖 
   執行語句: 
   
  begin tran 
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
  waitfor delay '00:00:05' 
   
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
   
  begin tran 
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
  waitfor delay '00:00:05' 
   
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
   
   新建兩個窗口,在5秒鐘內執行上面語句,不久就會出現死鎖提示。(結束后記住要把事務回滾啊)
   
   1.2 共享鎖引起的死鎖 
  begin tran 
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
  waitfor delay '00:00:05' 
   
  select * from [dbo].[[zping.com1]]] 
  where B='b2' 
   
   
  begin tran 
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
  waitfor delay '00:00:05' 
   
  select * from [dbo].[[zping.com2]]] 
  where E='e1' 
   
   新建兩個窗口,在5秒鐘內執行上面語句。不久就會出現死鎖提示。(結束后記住要把事務回滾啊)
       知道死鎖產生的原因,在生產環境產生的死鎖就類似這兩種情況。 
  
   后來在網上查閱了很多資料,包括sql server 2005的幫助文檔。總結有以下有主要幾點: 
   
   1,降低隔離級別或者使用行版本控制隔離級別 
   
   2,提高數據的訪問速度 
   
   3,減少事務長度 
   
   4,將按順序訪問熱點表(如將訪問頻繁的表放在最后訪問) 
   遇到的困難 
   但在我們這次優化中,有些是不太好處理的 如: 
   
   1,減少事務長度,事務的大小不是我們來決定的,是由業務邏輯來決定的(來自tom的《Oracle 9i/10g深入內部體系機構》中) 
   
   2,按順序訪問熱點表,我們發現代碼中方法間互相調用很頻繁,經常一個表調用多次,要修改表的訪問順序是比較困難的。 
   
   采用的方法 
   后來我們就使用了以下方法: 
   
   1,將數據庫隔離級別改成行版本控制隔離級別。(沒有了共享鎖死鎖) 
   
   2,重建和優化索引,優化SQL語句和采用分區視圖等方法。提高訪問速度。(減少了鎖定時間) 
   
   3,水平拆分表(分區)并在程序讀寫時盡量做到分區消除,減少讀寫的行數,降低鎖定升級的頻率和時間。 (減少鎖的升級) 
      通過4個月左右的運行,系統就發生過一次死鎖,比以前大大降低。 
 關鍵字:數據庫、SQL Server、死鎖
分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站