日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

解决SQL server2005数据库死锁的经验心得

發(fā)布時間:2025/7/14 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决SQL server2005数据库死锁的经验心得 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????????前段時間提到的"sql server 2005 死鎖解決探索",死鎖嚴重,平均每天會發(fā)生一次死鎖,在解決和處理SQL server2005死鎖中查了很多資料和想了很多辦法,后來我們就使用了以下方法:?
???
?? 1,將數(shù)據(jù)庫隔離級別改成行版本控制隔離級別。(沒有了共享鎖死鎖)?
???
?? 2,重建和優(yōu)化索引,優(yōu)化SQL語句和采用分區(qū)視圖等方法。提高訪問速度。(減少了鎖定時間)?
???
?? 3,水平拆分表(分區(qū))并在程序讀寫時盡量做到分區(qū)消除,減少讀寫的行數(shù),降低鎖定升級的頻率和時間。 (減少鎖的升級)?
??對為何出現(xiàn)死鎖和怎樣較少死鎖有了進一步認識,在這里和大家一起分享:?
???
???
???
?? SQL Server 鎖類型?
?? 在數(shù)據(jù)庫中主要存在兩種鎖: S(共享鎖)和X(排他鎖)?
???
?? S(共享鎖):在執(zhí)行查詢數(shù)據(jù)時,SQL server會將行鎖定,這時只能查詢數(shù)據(jù),刪,改被阻塞,?
???
?? X(排他鎖):在插入和刪除數(shù)據(jù)時,將行鎖定,這時增,刪,改都被阻塞?
???
?? 以上兩種鎖都會引起死鎖:?
???
?? 死鎖定義:在兩個或多個任務(wù)中,如果每個任務(wù)鎖定了其他任務(wù)試圖鎖定的資源,此時會造成這些任務(wù)永久阻塞,從而出現(xiàn)死鎖?
???
???
???
?? 這里模擬一下死鎖環(huán)境:?
???
?? 建立環(huán)境:?
??----死鎖例子,建立表數(shù)據(jù)?
??create table [dbo].[[zping.com1]]](?
??A varchar(2)?
??,B varchar(2)?
??,C varchar(2))?
???
??--插入數(shù)據(jù)?
??insert into [dbo].[[zping.com1]]]?
??select 'a1','b1','c1'?
??union all select 'a2','b2','c2'?
??union all select 'a3','b3','c3'?
???
??--建立表數(shù)據(jù)?
??create table [dbo].[[zping.com2]]]?
??(D varchar(2)?
??,E varchar(2))?
???
?? --插入數(shù)據(jù)?
??insert into [dbo].[[zping.com2]]]?
??select 'd1','e1'?
??union all select 'd2','e2'?
???
???
???
?? 1. 1 排他鎖引起的死鎖?
?? 執(zhí)行語句:?
???
??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秒鐘內(nèi)執(zhí)行上面語句,不久就會出現(xiàn)死鎖提示。(結(jié)束后記住要把事務(wù)回滾啊)?
???
?? 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秒鐘內(nèi)執(zhí)行上面語句。不久就會出現(xiàn)死鎖提示。(結(jié)束后記住要把事務(wù)回滾啊)?
???
???
???
?? 知道死鎖產(chǎn)生的原因,在生產(chǎn)環(huán)境產(chǎn)生的死鎖就類似這兩種情況。?
???
???
???
?? 后來在網(wǎng)上查閱了很多資料,包括sql server 2005的幫助文檔??偨Y(jié)有以下有主要幾點:?
???
?? 1,降低隔離級別或者使用行版本控制隔離級別?
???
?? 2,提高數(shù)據(jù)的訪問速度?
???
?? 3,減少事務(wù)長度?
???
?? 4,將按順序訪問熱點表(如將訪問頻繁的表放在最后訪問)?
???
???
???
?? 遇到的困難?
?? 但在我們這次優(yōu)化中,有些是不太好處理的 如:?
???
?? 1,減少事務(wù)長度,事務(wù)的大小不是我們來決定的,是由業(yè)務(wù)邏輯來決定的(來自tom的《Oracle 9i/10g深入內(nèi)部體系機構(gòu)》中)?
???
?? 2,按順序訪問熱點表,我們發(fā)現(xiàn)代碼中方法間互相調(diào)用很頻繁,經(jīng)常一個表調(diào)用多次,要修改表的訪問順序是比較困難的。?

總結(jié)

以上是生活随笔為你收集整理的解决SQL server2005数据库死锁的经验心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。