日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺談一次惱火的死鎖追蹤經(jīng)歷

最近,剛跳槽到一新公司,就遇到生產(chǎn)數(shù)據(jù)庫(kù)晚上突然出現(xiàn)大面積中斷,并持續(xù)近一小時(shí),而發(fā)生事故時(shí),我沒(méi)有在現(xiàn)場(chǎng),錯(cuò)過(guò)了直接獲取信息的機(jī)會(huì);過(guò)后boss要求追查原因,于是艱難的排查過(guò)程開(kāi)始了。

開(kāi)始以為是數(shù)據(jù)庫(kù)某個(gè)JOB運(yùn)行出現(xiàn)異常引起或者是因?yàn)槌绦蚶锩婺膫€(gè)鳥(niǎo)人寫(xiě)了垃圾語(yǔ)句造成了大面積的死鎖,于是將收集的trace信息拿到本地分析,從收集到的trace信息看,數(shù)據(jù)庫(kù)在19:49:28時(shí)出現(xiàn)了鎖,系統(tǒng)cancel了它,而且是連續(xù)三個(gè),之后數(shù)據(jù)庫(kù)大部分連接都是Abort了。

初步估計(jì)應(yīng)該是死鎖了,首先想到的就是因?yàn)閿?shù)據(jù)庫(kù)更新語(yǔ)句造成,于是查找Agent里面是否有對(duì)應(yīng)時(shí)間的JOB運(yùn)行,結(jié)果沒(méi)有匹配的,然后分析trace文件里面是否有該時(shí)間段內(nèi)運(yùn)行的長(zhǎng)Update、Insert或者Delete語(yǔ)句,查了半天也沒(méi)發(fā)現(xiàn),汗。。。,調(diào)查長(zhǎng)查詢,還是沒(méi)有,狂汗。。。

Trace文件分析來(lái)分析去也沒(méi)辦法定位到具體語(yǔ)句(Trace 文件中只抓取了運(yùn)行時(shí)間超過(guò)2秒或者讀大于10000的記錄),看來(lái)問(wèn)題不是那么簡(jiǎn)單了;光根據(jù)Trace文件信息想要找到兇手估計(jì)不可能了,于是把Windows日志和數(shù)據(jù)庫(kù)錯(cuò)誤日志都查了一遍,也沒(méi)有發(fā)現(xiàn)任何異常,難道是無(wú)頭案。。。(沒(méi)查到任何信息,擔(dān)心飯碗不保了)

想來(lái)想去,也問(wèn)了一些牛人,都沒(méi)有啥結(jié)果,看來(lái)通過(guò)手頭上現(xiàn)有的資料估計(jì)要找出問(wèn)題是沒(méi)多少希望了,只能另辟蹊徑;既然可以肯定是因?yàn)樗梨i造成的,那說(shuō)明數(shù)據(jù)庫(kù)里面肯定存在資源的不一致訪問(wèn)或者競(jìng)爭(zhēng),那就從死鎖下手,于是先清空掉當(dāng)前的數(shù)據(jù)庫(kù)錯(cuò)誤日志文件,再打開(kāi)1204和1222跟蹤標(biāo)志,等待魚(yú)兒上鉤。

 
 
 
 
  1. DBCC errorlog
  2. DBCC TRACEON (1204, 1222, -1);
  3. DBCC tracestatus

收集了幾天數(shù)據(jù),準(zhǔn)備收網(wǎng)了,將ERROR.LOG從服務(wù)器拷貝到本地,用UE打開(kāi),認(rèn)真一行行看,找到如下信息:

 
 
 
 
  1. Deadlock encountered .... Printing deadlock information

果然是死鎖,總算找到真兇了,用UE查找一把,不查不知道,一查嚇一跳,一堆死鎖...

死鎖信息如下:

查看一下頁(yè)面信息:

 
 
 
 
  1. DBCC TRACEON (3604) 
  2. DBCC PAGE('XXXX',1,22664690,3) WITH TABLERESULTS
  3. DBCC TRACEOFF (3604)

這些頁(yè)面信息都正常。

再根據(jù)信息,Input Buf 的信息,反過(guò)來(lái)查詢Trace文件(Input Buffer 只能存放255個(gè)字節(jié),信息顯示不全,只能反過(guò)來(lái)找):

 
 
 
 
  1. select top 10 * from fn_trace_gettable('F:\perfmon\Trace_xxxx_20110406A.trc',default) 
  2. where TextData like '%@SMESSAGE varchar(8000),@SINMATERECID varchar(8000),@SREFRECID varchar(8000)%'
 
 
 
 
  1. select top 10 * from fn_trace_gettable('F:\perfmon\Trace_xxxx_20110406A.trc',default) 
  2. where TextData like '%@P0_ varchar(7),@P1_ datetime,@P2_ datetime,@P3_ varchar(7),@P4_ datetime%'

 發(fā)現(xiàn),死鎖在表Rec_Main表上,一個(gè)是修改,一個(gè)是查詢,而這個(gè)表數(shù)據(jù)量達(dá)700多W,又一個(gè)汗.....

不過(guò)很奇怪的是,死鎖顯示的信息都是些簡(jiǎn)單的修改(單條記錄修改)和查詢操作,不至于引起這么多死鎖呀,繼續(xù)頭大中...

繼續(xù)追查后發(fā)現(xiàn),這兩個(gè)操作在數(shù)據(jù)庫(kù)中比較頻繁(一天的trace記錄):

 
 
 
 
  1. select COUNT(0) from fn_trace_gettable('F:\perfmon\Trace_xxxx_20110406A.trc',default) 
  2. where TextData like '%@P0_ varchar(7),@P1_ datetime,@P2_ datetime,@P3_ varchar(7),@P4_ datetime%'
 
 
 
 
  1. select COUNT(0) from fn_trace_gettable('F:\perfmon\Trace_xxxx_20110406A.trc',default) 
  2. where TextData like '%@SMESSAGE varchar(8000),@SINMATERECID varchar(18),@SREFRECID varchar(8000)%'

一天的死鎖次數(shù)大概有20次左右,Update一次只有一條記錄,但是為啥會(huì)出現(xiàn)如此頻繁的死鎖呢? 除了這個(gè)表本身的數(shù)據(jù)量大
以及查詢超級(jí)變態(tài)之外(后面發(fā)現(xiàn)是主因),還有沒(méi)有其他的原因呢?

最后,實(shí)在找不出問(wèn)題所在,將問(wèn)題反映到微軟,和微軟的人經(jīng)過(guò)幾天的溝通,最終給出的結(jié)果是數(shù)據(jù)庫(kù)的Bug(吐血,運(yùn)氣真好呀),微軟回答如下:

問(wèn)題分析:

========

您的數(shù)據(jù)庫(kù)版本是:Microsoft SQL Server 2005 - 9.00.4207.00 (Intel IA-64)  Enterprise Edition,SP3 CU1

我檢查了您提供的死鎖相關(guān)信息后發(fā)現(xiàn),如您所說(shuō),您的這個(gè)死鎖問(wèn)題正是SQL2005的Bug所引起,詳細(xì)可以參考文檔:

處理方法:

============

您可以單獨(dú)安裝SP3 CU6,也可以直接安裝SP4來(lái)解決您的這個(gè)問(wèn)題

SP3 CU6下載地址:

SP4下載地址:

您的SQL Server是IA64的版本,所以請(qǐng)選擇正確對(duì)應(yīng)的安裝文件

-------補(bǔ)充---

微軟雖然給出了一個(gè)可能的原因(還不知道靠不靠譜),但是基于目前系統(tǒng)的情況,boss不建議打補(bǔ)?。ㄒ舻蕉ㄆ诰S護(hù)的時(shí)候再做),于是要我提改進(jìn)方案,有了以上的追蹤信息,再來(lái)提改進(jìn)方案就不是什么難事了,于是mail給了boss:

根據(jù)這些信息,我們可以知道:

死鎖主要發(fā)生在表Rec_main上,這個(gè)表的數(shù)據(jù)量有700多萬(wàn);

 主要是由一個(gè)Update和一個(gè)Select語(yǔ)句引起了死鎖,這兩條語(yǔ)句運(yùn)行頻率比較高,并且查詢語(yǔ)句非常長(zhǎng)(見(jiàn)附件,這樣的查詢不可能使用到索引);

主要問(wèn)題出在這個(gè)復(fù)雜的查詢和表的數(shù)據(jù)量上(還包括微軟說(shuō)的bug);

目前這種死鎖在我們數(shù)據(jù)庫(kù)里面還是頻繁的發(fā)生。

為處理這種情況,有以下建議:

業(yè)務(wù)上,是否能夠?qū)⒃摫淼男畔⒎珠_(kāi),減少數(shù)據(jù)量;

開(kāi)發(fā)人員能否改進(jìn)這個(gè)查詢語(yǔ)句;

查詢是否可以考慮加上with(nolock),Update 語(yǔ)句可以加上 with(rowlock);

其他(考慮分區(qū)表等)。

最終,將表中數(shù)據(jù)搬移掉一部分,修改了查詢的語(yǔ)句,同時(shí)加上了with(nolock),問(wèn)題得到解決(至于微軟的方案,要見(jiàn)下回分解了)


分享題目:淺談一次惱火的死鎖追蹤經(jīng)歷
分享網(wǎng)址:http://m.5511xx.com/article/djoegij.html