專利名稱:一種死鎖定位的方法、死鎖定位裝置和數(shù)據(jù)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其是涉及一種死鎖定位的方法、死鎖定 位裝置和數(shù)據(jù)系統(tǒng)。
背景技術(shù):
計(jì)算機(jī)各進(jìn)程執(zhí)行過程中,經(jīng)常因爭奪資源或者程序設(shè)計(jì)問題而造成一 種互相等待而無法繼續(xù)執(zhí)行的現(xiàn)象,稱為死鎖。在數(shù)據(jù)庫也會(huì)經(jīng)常發(fā)生死鎖
現(xiàn)象。SQL (Structured Query Language,結(jié)構(gòu)化查詢語言)數(shù)據(jù)庫對(duì)數(shù)據(jù)的 操作建立在一個(gè)或多個(gè)關(guān)系數(shù)據(jù)表上,通過對(duì)這些關(guān)系數(shù)據(jù)表的分類、合并、
連接或選取等運(yùn)算來實(shí)現(xiàn)數(shù)據(jù)的管理;因此,SQL數(shù)據(jù)庫經(jīng)常發(fā)生死鎖現(xiàn)象, 例如進(jìn)程1鎖住數(shù)據(jù)表A等待數(shù)據(jù)表B,而進(jìn)程2鎖住數(shù)據(jù)表B等待數(shù)據(jù)表 A;若無外力作用,涉及到的進(jìn)程都將無法推進(jìn)下去,此時(shí)系統(tǒng)則處于死鎖 狀態(tài),而那些無法推進(jìn)的進(jìn)程稱為死鎖進(jìn)程。
要解除死鎖狀態(tài),就得確定死鎖發(fā)生的位置?,F(xiàn)有技術(shù)一般依賴于技術(shù) 人員對(duì)死鎖信息和數(shù)據(jù)庫提供的事務(wù)跟蹤報(bào)告的觀察分析,或者依賴于各數(shù) 據(jù)庫廠家提供的死鎖查找工具,人工分析大量的信息后,查找出造成死鎖的 SQL語句,調(diào)用該SQL語句的應(yīng)用程序代碼,再確定死鎖位置。查找出應(yīng) 用程序代碼的過程稱為死鎖定位。
在對(duì)現(xiàn)有技術(shù)的研究和實(shí)踐過程中,本發(fā)明的發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在 以下問題
現(xiàn)有技術(shù)對(duì)數(shù)據(jù)庫死鎖定位的方案需要技術(shù)人員對(duì)整個(gè)數(shù)據(jù)庫系統(tǒng)相當(dāng) 熟悉,而且需要熟悉各數(shù)據(jù)庫廠家提供的死鎖查找相關(guān)工具,并且需要人工 分析大量的信息,另外對(duì)某些沒有提供相關(guān)死鎖查找工具的小型數(shù)據(jù)庫無從 下手。綜上,現(xiàn)有技術(shù)的死鎖定位方法過分依賴于人工分析,處理信息量大, 效率低下。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例要解除的技術(shù)問題是提供一種死鎖定位的方法、死鎖定位 裝置和數(shù)據(jù)系統(tǒng),能夠更簡單實(shí)現(xiàn)死鎖定位,并可以減少信息處理量,提高 效率。為解除上述技術(shù)問題,本發(fā)明所提供的實(shí)施例是通過以下技術(shù)方案實(shí)現(xiàn)
的
一種死鎖定位的方法在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取在死鎖中 被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);將所述被犧牲的事務(wù)及與死鎖 的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;提取相同的數(shù) 據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;根據(jù)提取的所述程序執(zhí)行語句查看語句調(diào) 用棧,確定死鎖的發(fā)生位置。
優(yōu)選地,獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)具體 為根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取在死鎖中 被犧牲的事務(wù)及所述被犧牲事務(wù)的起止時(shí)間,并根據(jù)所述被犧牲的事務(wù)的起 止時(shí)間,獲取所述起止時(shí)間內(nèi)與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)。
優(yōu)選地,根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取 被犧牲的事務(wù)及所述被犧牲事務(wù)的起止時(shí)間具體為根據(jù)在Apusic應(yīng)用服務(wù) 器上的數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果中的死鎖異常信息過濾出被犧牲的事務(wù), 再根據(jù)所述被犧牲事務(wù)的跟蹤日志和事務(wù)標(biāo)識(shí)得到所述被犧牲事務(wù)的起止時(shí) 間。
優(yōu)選地,將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù) 據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合具體為在所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有 關(guān)聯(lián)的事務(wù)里選取一個(gè)事務(wù)作為分析源,將所述分析源使用的數(shù)據(jù)表以程序 執(zhí)行語句執(zhí)行的時(shí)間先后順序排列后進(jìn)行組合,將所述分析源以外的其他每 一個(gè)事務(wù)使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí)行時(shí)間先后順序的逆序排列后進(jìn)行 組合。
源使用的數(shù)據(jù)表組合與分析源以外的其他每一個(gè)事務(wù)進(jìn)行比較,得到相同組 合,提取相同組合所對(duì)應(yīng)的程序執(zhí)行語句。 優(yōu)選地,進(jìn)行組合為進(jìn)行兩兩組合。
一種死鎖定位裝置,包括獲取事務(wù)單元,用于在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā) 生死鎖后,獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);組合 單元,用于將獲取事務(wù)單元獲取的所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;提取單元,用于提取相同的
數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;定位單元,用于根據(jù)提取單元提取的所
述程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的發(fā)生位置。
優(yōu)選地,組合單元包括獲取時(shí)間單元,用于根據(jù)Apusic應(yīng)用服務(wù)器執(zhí) 行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取在死鎖中被犧牲的事務(wù)及所述被犧牲事
務(wù)的起止時(shí)間;獲取事務(wù)單元,用于獲取所述起止時(shí)間內(nèi)與死鎖的產(chǎn)生有關(guān) 聯(lián)的事務(wù);數(shù)據(jù)表組合單元,用于將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān) 聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合。
優(yōu)選地,數(shù)據(jù)表組合單元包括第一組合單元,用于在所述被犧牲的事 務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)里選取一個(gè)事務(wù)作為分析源,將所述分析源 使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí)行的時(shí)間先后順序排列后進(jìn)行組合;第二組 合單元,用于將所述分析源以外的其他每一個(gè)事務(wù)使用的數(shù)據(jù)表以程序執(zhí)行 語句執(zhí)行時(shí)間先后順序的逆序排列后進(jìn)行組合。
一種數(shù)據(jù)系統(tǒng),包括Apusic應(yīng)用服務(wù)器,用于執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤;死 鎖定位裝置,用于在所述數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,根據(jù)跟蹤結(jié)果獲取 在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù),并將所述被犧牲的事 務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合,根據(jù) 提取的相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的 發(fā)生位置。
由上述技術(shù)方案可以看出,本發(fā)明實(shí)施例通過獲取與死鎖的產(chǎn)生有關(guān)聯(lián) 的事務(wù),將所述事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合,再根據(jù)提取的 相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的發(fā)生位 置,使得定位死鎖過程中需要人工分析的信息量大大減少,能夠更簡單實(shí)現(xiàn) 死鎖定位,提高效率。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施 例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述 中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付 出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖l是本發(fā)明實(shí)施例一的方法流程示意圖; 圖2是本發(fā)明實(shí)施例二的方法流程示意圖; 圖3是本發(fā)明實(shí)施例三的方法流程示意圖; 圖4是本發(fā)明實(shí)施例死鎖定位裝置的結(jié)構(gòu)示意圖; 圖5是本發(fā)明實(shí)施例數(shù)據(jù)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行 清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而 不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作 出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例的實(shí)施環(huán)境為在Apusic應(yīng)用服務(wù)器上新建數(shù)據(jù)庫事務(wù)跟 蹤,指定要跟蹤的Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)源,數(shù)據(jù)源為數(shù)據(jù)庫在Apusic 應(yīng)用服務(wù)器上的一個(gè)代理以方便在死鎖發(fā)生后,確定在死鎖中被犧牲事務(wù)的 起止時(shí)間及事務(wù)標(biāo)識(shí)ID等信息。根據(jù)這些信息可以確定與死鎖的產(chǎn)生有關(guān) 聯(lián)的事務(wù),而后對(duì)與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表的對(duì)應(yīng)各個(gè)事 務(wù)的組合進(jìn)行分析,提取相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句后,查看 語句調(diào)用棧,則能確定死鎖的發(fā)生位置。
因Apusic應(yīng)用服務(wù)器屏蔽與不同數(shù)據(jù)庫通信的差異化,為應(yīng)用程序訪問 數(shù)據(jù)庫提供統(tǒng)一接口,則能支持通用數(shù)據(jù)庫,所以本發(fā)明實(shí)施例能針對(duì)所有 類型數(shù)據(jù)庫解決死鎖定位問題。
實(shí)施例一、參見圖l詳細(xì)"i兌明,圖1為本實(shí)施例一的方法流程示意圖。
步驟101:數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取在死鎖中被犧牲的事務(wù) 及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)。
在所述數(shù)據(jù)庫發(fā)生死鎖后,有可能表現(xiàn)為訪問失敗、系統(tǒng)報(bào)警等,本發(fā) 明實(shí)施例確定在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)來排查死 鎖源,顯然,所述事務(wù)在使用Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)庫資源時(shí),能被 Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)庫事務(wù)跟蹤功能跟蹤到。
與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)為在死鎖中被犧牲的事務(wù)在執(zhí)行過程中,同 步執(zhí)行的其他事務(wù),與死鎖的產(chǎn)生密切相關(guān)。要獲取與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù),需先根據(jù)Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果確定被犧 牲事務(wù)的起止時(shí)間,而后根據(jù)該起止時(shí)間確定哪些事務(wù)與被犧牲事務(wù)有關(guān)聯(lián)。
該起止時(shí)間可以根據(jù)所述被犧牲事務(wù)的跟蹤日志和事務(wù)ID屬性得到。
步驟102:將在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使 用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合。
要將在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù) 表對(duì)應(yīng)各自事務(wù)進(jìn)行組合,先在所述事務(wù)中選定一個(gè)事務(wù)作為分析源,將分 析源、與死鎖的產(chǎn)生有關(guān)聯(lián)的其他事務(wù)在程序執(zhí)行過程中使用的數(shù)據(jù)表分別 對(duì)應(yīng)各自事務(wù)進(jìn)行組合。分析源可以是在死鎖中被犧牲的事務(wù)。
步驟103:提取相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句。
將分析源和與死鎖的產(chǎn)生有關(guān)聯(lián)的其他事務(wù)在執(zhí)行過程中使用的數(shù)據(jù)表
的組合中的相同組合對(duì)應(yīng)的程序執(zhí)行語句提取出來,進(jìn)一步確定資源爭奪可
能與哪些程序執(zhí)行語句的執(zhí)行相關(guān)。
步驟104:根據(jù)所述提取的程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的
發(fā)生位置。
根據(jù)步驟103分析的結(jié)果,將死鎖發(fā)生位置的范圍縮小到不同事務(wù)所共 同使用的數(shù)據(jù)表,提取數(shù)據(jù)表對(duì)應(yīng)的程序執(zhí)行語句,并查看程序執(zhí)行語句調(diào) 用棧,將死鎖原因定位到具體的應(yīng)用程序代碼上。
定位之后可以予以調(diào)整該代碼位置或撤銷該代碼的執(zhí)行來解除死鎖狀
太
心0
本發(fā)明實(shí)施例根據(jù)提取的相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語 句調(diào)用棧,使得定位死鎖過程中需要人工分析的信息量大大減少,能夠更簡 單實(shí)現(xiàn)死鎖定位,提高效率。
以下實(shí)施例二詳細(xì)說明將引起與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表 對(duì)應(yīng)各自事務(wù)進(jìn)行組合的過程,程序執(zhí)行語句以SQL語句為例。
實(shí)施例二、參見圖2詳細(xì)說明,圖2為本實(shí)施例的流程示意圖。
步驟201:數(shù)據(jù)庫運(yùn)行的程序發(fā)生死鎖后,根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行 數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取在死鎖中被犧牲的事務(wù)的起止時(shí)間。
在系統(tǒng)產(chǎn)生死鎖現(xiàn)象后,如訪問失敗、系統(tǒng)報(bào)警等,本發(fā)明實(shí)施例定位裝置根據(jù)數(shù)據(jù)庫跟蹤日志、事務(wù)ID屬性等確定在死鎖中被犧牲事務(wù)的起止
時(shí)間,該被犧牲事務(wù)在使用Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)源時(shí),能被Apusic
應(yīng)用服務(wù)器上數(shù)據(jù)庫事務(wù)跟蹤功能跟蹤到起止時(shí)間。
步驟202:根據(jù)所述起止時(shí)間過濾出與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)。 一個(gè)事務(wù)的執(zhí)行過程中,可能會(huì)與同一時(shí)間內(nèi)并發(fā)執(zhí)行的事務(wù)產(chǎn)生死鎖,
獲取到被犧牲事務(wù)的起止時(shí)間內(nèi)并發(fā)執(zhí)行的事務(wù),有利于快速地查找到引起
死鎖的SQLi吾句。
步驟203:在被犧牲事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)中指定一個(gè)事務(wù) 作為分析源,提取分析源使用過的數(shù)據(jù)表的組合。
將提取到的分析源事務(wù)執(zhí)行SQL語句的使用的所有數(shù)據(jù)表以SQL語句 執(zhí)行的時(shí)間先后順序排列,可以是兩兩組合,例如使用的數(shù)據(jù)表有A、 B、 C 三表,其兩兩組合的組合有A-B、 B-C、 A-C。
步驟204:提取所述被犧牲事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)中的除分 析源以外的其他事務(wù)使用過的數(shù)據(jù)表的對(duì)應(yīng)各自事務(wù)的組合。
將提取到的被犧牲事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)中的除分析源以外 的其他事務(wù)執(zhí)行SQL語句的使用的所有數(shù)據(jù)表以SQL語句執(zhí)行的時(shí)間先后 順序的逆序排列,對(duì)應(yīng)各自事務(wù)的組合可以是兩兩組合,例如使用的數(shù)據(jù)表 B、 A、 C三表的逆序?yàn)镃、 A、 B,其兩兩組合的組合有C-B、 C-A、 A-B。
步驟205:在分析源使用過的數(shù)據(jù)表的組合以及除分析源以外的其他事 務(wù)使用過的數(shù)據(jù)表組合里,提取相同的數(shù)據(jù)表組合對(duì)應(yīng)的SQL語句。
當(dāng)其他事務(wù)執(zhí)行SQL語句的使用的數(shù)據(jù)表時(shí)間先后順序與分析源事務(wù) 執(zhí)行SQL語句使用的數(shù)據(jù)表先后順序相反時(shí),有可能造成資源爭奪的沖突, 所以,其他事務(wù)執(zhí)行SQL語句的使用的數(shù)據(jù)表先后順序的逆序一般與分析源 事務(wù)使用的數(shù)據(jù)表先后順序相同。
因此,在分析源事務(wù)執(zhí)行SQL語句的所有數(shù)據(jù)表的組合和其他事務(wù)執(zhí)行 SQL語句的所有數(shù)據(jù)表的組合里,將相同的數(shù)據(jù)表組合對(duì)應(yīng)的SQL語句提 取出來,有利于快速確定死鎖發(fā)生的位置。
例如分析源事務(wù)執(zhí)行SQL語句的所有數(shù)據(jù)表的兩兩組合為A-B、 B-C、 A-C,其他事務(wù)執(zhí)行SQL語句的所有數(shù)據(jù)表的兩兩組合為C-B、 C-A、 A-B,200810145707.6 其中A-B組合是相同的,則分析源事務(wù)與所述其他事務(wù)有可能在執(zhí)行過程中 引起資源爭奪而造成死鎖,所以將該數(shù)據(jù)表組合提取出來。
步驟206:判斷是否所有相關(guān)事務(wù)都已分析完畢,是則轉(zhuǎn)入步驟207,否 則轉(zhuǎn)入步驟203。
全面分析了所有與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)的情況后,轉(zhuǎn)入步驟207; 否則轉(zhuǎn)入步驟203。
步驟207:根據(jù)所述提取的數(shù)據(jù)表組合對(duì)應(yīng)的SQL語句查看SQL語句調(diào) 用棧,確定死鎖的發(fā)生位置。
SQL語句調(diào)用棧是代碼執(zhí)行的路徑,比如在a函數(shù)內(nèi)調(diào)用了 b函數(shù),那 調(diào)用棧就是a》b,因此,從調(diào)用??梢郧宄闯瞿男┚唧w應(yīng)用代碼執(zhí)行了所 述SQL"i吾句。
根據(jù)提取的相同的數(shù)據(jù)表組合,針對(duì)可能會(huì)引起死鎖狀態(tài)的數(shù)據(jù)表調(diào)用 情況,調(diào)出與該數(shù)據(jù)表組合對(duì)應(yīng)的SQL執(zhí)行語句,減少了人工分析的信息量; 再查看SQL語句調(diào)用棧,確定調(diào)用該SQL執(zhí)行語句的具體應(yīng)用程序代碼,則 簡單確定了死鎖發(fā)生的位置,提高了死鎖定位的效率。
定位之后可以予以調(diào)整該代碼位置或撤銷該代碼的執(zhí)行來解除死鎖狀態(tài)。
以下實(shí)施例三為實(shí)際應(yīng)用環(huán)境中的 一個(gè)實(shí)例。
實(shí)施例三、參見圖3,圖3為本發(fā)明實(shí)施例的方法流程示意圖。
步驟301:在Apusic應(yīng)用服務(wù)器的數(shù)據(jù)源監(jiān)控工具上新建跟蹤。
Apusic服務(wù)器為應(yīng)用程序訪問數(shù)據(jù)庫提供統(tǒng)一接口 ,能支持通用數(shù)據(jù)庫。
步驟302:選中要跟蹤的數(shù)據(jù)源,該數(shù)據(jù)源位于Apusic服務(wù)器上。
步驟303:在死鎖發(fā)生后,查看跟蹤結(jié)果。
跟蹤結(jié)果顯示的異常信息可找到哪些事務(wù)在死鎖中被犧牲,即被終止執(zhí) 行。例如從異常信息可直接找出事務(wù)ID為11的事務(wù)被終止執(zhí)行。
步驟304:接收到死鎖分析的指令,獲取到被犧牲事務(wù)的事務(wù)ID。 當(dāng)點(diǎn)擊"死鎖分析"按鈕時(shí),定位裝置接收到開始死鎖分析的指令;輸 入被犧牲事務(wù)的事務(wù)ID,定位裝置獲取到被犧牲事務(wù)的事務(wù)ID。例如,從 跟蹤結(jié)果中查找出被犧牲事務(wù)對(duì)應(yīng)的事務(wù)ID為11,則點(diǎn)擊"死鎖分析"按4丑后輸入11。
步驟305:顯示與被犧牲事務(wù)產(chǎn)生沖突的事務(wù)。
定位裝置在后臺(tái)根據(jù)數(shù)據(jù)庫跟蹤日志、事務(wù)ID屬性等確定被犧牲的事務(wù) 的起止時(shí)間,并根據(jù)所述起止時(shí)間過濾出與死鎖發(fā)生相關(guān)聯(lián)事務(wù)的事務(wù)ID。 例如,從分析結(jié)果中得到與被犧牲事務(wù)產(chǎn)生沖突事務(wù)的事務(wù)ID為16。
定位裝置在后臺(tái)提取事務(wù)ID為11的事務(wù)使用過的所有數(shù)據(jù)表的兩兩組 合,按以SQL語句執(zhí)行的時(shí)間先后順序排列;提取事務(wù)ID為16的事務(wù)使用 過的所有數(shù)據(jù)表的兩兩組合,以執(zhí)行SQL語句的所有數(shù)據(jù)表以SQL語句執(zhí) 行的時(shí)間先后順序的逆序排列,提取相同的表組合對(duì)應(yīng)的SQL語句,得到分 析結(jié)果。
例如,分析結(jié)果如下表所示:
SQL語句事務(wù)ID
UPDATE B SET name=,bb, WHERE id=' 1'11
UPDATE A SET name=,ba, WHERE id=, 1'11
UPDATE A SET name=,aa, WHERE id=, 1'16
UPDATE B SET name=W WHERE id=, 1'16
由上表得知,事務(wù)ID為11和16的事務(wù)可能因?yàn)樵诒鞟和表B的使用 上造成沖突而引起死鎖。
步驟306:查看調(diào)用棧,確定死鎖的發(fā)生位置。
查看步驟305分析結(jié)果列出的SQL語句對(duì)應(yīng)的調(diào)用棧,可以定位到事務(wù) ID為11和16的應(yīng)用程序中的代碼行,確定死鎖發(fā)生的位置。比如根據(jù)調(diào)用 棧確定事務(wù)ID為11的事務(wù)在調(diào)用步驟305分析結(jié)果列出的SQL語句時(shí)具體 應(yīng) 用 的 應(yīng) 用 程 序 代 碼 為 at com.apusic.test.statment.TestStatementBean.transB(TestStatementBean.Java:549) ,則確定了死鎖發(fā)生的位置。
以上提供了 一種死鎖定位的方法,本發(fā)明實(shí)施例還提供一種死鎖定位裝置。
一種死鎖定位裝置,參見圖4,圖4為本發(fā)明實(shí)施例數(shù)據(jù)庫死鎖定位裝置 的結(jié)構(gòu)示意圖,包括獲取事務(wù)單元401,用于在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取被犧牲的
事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);
組合單元402,用于將獲取事務(wù)單元401獲取的所述被犧牲的事務(wù)及與死 鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;
提取單元403,用于提耳又相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;
定位單元404,用于根據(jù)提取單元403提取的所述程序執(zhí)行語句查看程序 執(zhí)行語句調(diào)用棧,確定死鎖發(fā)生位置。
所述組合單元402包括子單元
獲取時(shí)間單元4021,用于根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的 跟蹤結(jié)果,獲取被犧牲事務(wù)及所述被犧牲事務(wù)的起止時(shí)間;
獲取事務(wù)單元4022,用于獲取所述起止時(shí)間內(nèi)與死鎖的產(chǎn)生有關(guān)聯(lián)的事
務(wù);
數(shù)據(jù)表組合單元4023,用于將被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事 務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合。 所述數(shù)據(jù)表組合單元4023包括子單元
第一組合單元4024,用于在所述與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)里選取一個(gè) 事務(wù)作為分析源,將所述分析源使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí)行的時(shí)間先 后順序排列后進(jìn)行組合
第二組合單元4025,用于將所述分析源以外的其他每一個(gè)事務(wù)使用的數(shù)
在所述數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取事務(wù)單元401獲取被犧牲的 事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù),組合單元402將獲取事務(wù)單元獲取的所 述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù) 進(jìn)行組合,提取單元403提取出相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句, 定位單元404根據(jù)提取單元403提取的所述程序執(zhí)行語句查看程序執(zhí)行語句 調(diào)用棧,確定死鎖發(fā)生位置。
其中,組合單元402中的獲取時(shí)間單元4021根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行 數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取被犧牲事務(wù)及所述被犧牲事務(wù)的起止時(shí)間, 獲取事務(wù)單元4022獲取所述起止時(shí)間內(nèi)的與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)后,數(shù)據(jù)表組合單元4023將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的
數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合。
進(jìn)一步地,數(shù)據(jù)表組合單元4023中的第一組合單元4024在所述與死鎖 的產(chǎn)生有關(guān)聯(lián)的事務(wù)里選取一個(gè)事務(wù)作為分析源,將所述分析源使用的數(shù)據(jù)
4025則將所述分析源以外的其他每一個(gè)事務(wù)使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí) 行時(shí)間先后順序的逆序排列后進(jìn)行組合。
一種數(shù)據(jù)系統(tǒng),參見圖5,圖5為本發(fā)明實(shí)施例數(shù)據(jù)系統(tǒng)的結(jié)構(gòu)示意圖, 系統(tǒng)包括
Apusic應(yīng)用服務(wù)器501,用于執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤;
死鎖定位裝置502,用于在所述數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,根據(jù)跟蹤 結(jié)果獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù),并將所述被 犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組 合,根據(jù)提取的相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語句調(diào)用棧,確 定死鎖的發(fā)生位置。
所述死鎖定位裝置502可使用前述一種死鎖定位裝置的具體結(jié)構(gòu),不影 響本發(fā)明實(shí)施例的實(shí)現(xiàn)。
生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合,根據(jù)提取的相同的數(shù) 據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的發(fā)生位置,使得 定位死鎖需要人工分析的信息量大大減少,簡單實(shí)現(xiàn)死鎖定位,提高效率。
并且因Apusic應(yīng)用服務(wù)器屏蔽與不同數(shù)據(jù)庫通信的差異化,為應(yīng)用程序 訪問數(shù)據(jù)庫提供統(tǒng)一接口,則能支持通用數(shù)據(jù)庫,所以本發(fā)明實(shí)施例能針對(duì) 所有類型數(shù)據(jù)庫解決死鎖定位問題。
需要說明的是,對(duì)于前述的各方法實(shí)施例,為了簡單描述,故將其都 表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受 所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序 或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí) 施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒 有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
本發(fā)明可以用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)人
計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系
統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型
計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。此 外,本發(fā)明還可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述, 例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類 型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中 實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過通訊網(wǎng)絡(luò)而被連接的遠(yuǎn)程處 理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備 在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
以上對(duì)本發(fā)明實(shí)施例所提供的一種數(shù)據(jù)庫死鎖定位的方法、死鎖定位裝 置和數(shù)據(jù)系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí) 施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其
核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體 實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解 為對(duì)本發(fā)明的限制。
權(quán)利要求
1、一種死鎖定位的方法,其特征在于在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;提取相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;根據(jù)提取的所述程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的發(fā)生位置。
2、 根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫死鎖定位的方法,其特征在于 所述獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)具體為 根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取在死鎖中被犧牲的事務(wù)及所述被犧牲事務(wù)的起止時(shí)間,并根據(jù)所述被犧牲的事務(wù)的起 止時(shí)間,獲取所述起止時(shí)間內(nèi)與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)。
3、 根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫死鎖定位的方法,其特征在于 所述根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取被犧牲的事務(wù)及所述被犧牲事務(wù)的起止時(shí)間具體為根據(jù)在Apusic應(yīng)用服務(wù)器上的數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果中的死鎖異常 信息過濾出被犧牲的事務(wù),再根據(jù)所述被犧牲事務(wù)的跟蹤日志和事務(wù)標(biāo)識(shí)得 到所述被犧牲事務(wù)的起止時(shí)間。
4、 根據(jù)權(quán)利要求1所述的數(shù)據(jù)庫死鎖定位的方法,其特征在于 所述將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合具體為在所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)里選取一個(gè)事務(wù)作為 分析源,將所述分析源使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí)行的時(shí)間先后順序排 列后進(jìn)行組合,將所述分析源以外的其他每一個(gè)事務(wù)使用的數(shù)據(jù)表以程序執(zhí)
5、 根據(jù)權(quán)利要求4所述的數(shù)據(jù)庫死鎖定位的方法,其特征在于將分析源使用的數(shù)據(jù)表組合與分析源以外的其他每一個(gè)事務(wù)進(jìn)行比較, 得到相同組合,提取相同組合所對(duì)應(yīng)的程序執(zhí)行語句。
6、 根據(jù)權(quán)利要求4或5所述的數(shù)據(jù)庫死鎖定位的方法,其特征在于所述進(jìn)行組合為進(jìn)行兩兩組合。
7、 一種死鎖定位裝置,其特征在于,包括獲取事務(wù)單元,用于在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取在死鎖中被 犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);組合單元,用于將獲取事務(wù)單元獲取的所述被犧牲的事務(wù)及與死鎖的產(chǎn) 生有關(guān)聯(lián)的事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;提取單元,用于提取相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;定位單元,用于根據(jù)提取單元提取的所述程序執(zhí)行語句查看語句調(diào)用棧, 確定死鎖的發(fā)生位置。
8、 根據(jù)權(quán)利要求6所述的死鎖定位裝置,所述組合單元包括 獲取時(shí)間單元,用于根據(jù)Apusic應(yīng)用服務(wù)器執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤的跟蹤結(jié)果,獲取在死鎖中被犧牲的事及所述被犧牲事務(wù)的起止時(shí)間;數(shù)據(jù)表組合單元,用于將所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事 務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合。
9、 根據(jù)權(quán)利要求7所述的死鎖定位裝置,所述數(shù)據(jù)表組合單元包括 第一組合單元,用于在所述被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)里選取一個(gè)事務(wù)作為分析源,將所述分析源使用的數(shù)據(jù)表以程序執(zhí)行語句執(zhí) 行的時(shí)間先后順序排列后進(jìn)行組合;第二組合單元,用于將所述分析源以外的其他每一個(gè)事務(wù)使用的數(shù)據(jù)表
10、 一種數(shù)據(jù)系統(tǒng),其特征在于,包括 Apusic應(yīng)用服務(wù)器,用于執(zhí)行數(shù)據(jù)庫事務(wù)跟蹤;死鎖定位裝置,用于在所述數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,根據(jù)跟蹤結(jié) 果獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù),并將所述被犧 牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組 合,根據(jù)提取的相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看語句調(diào)用棧,確 定死鎖的發(fā)生位置。
全文摘要
本發(fā)明實(shí)施例公開了一種死鎖定位的方法、死鎖定位裝置和數(shù)據(jù)系統(tǒng),所述方法為在數(shù)據(jù)庫運(yùn)行的進(jìn)程發(fā)生死鎖后,獲取在死鎖中被犧牲的事務(wù)及與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù);將所述事務(wù)所使用的數(shù)據(jù)表對(duì)應(yīng)各自事務(wù)進(jìn)行組合;提取相同的數(shù)據(jù)表組合所對(duì)應(yīng)的程序執(zhí)行語句;根據(jù)所述提取的程序執(zhí)行語句查看語句調(diào)用棧,確定死鎖的發(fā)生位置。本發(fā)明實(shí)施例提供的死鎖定位的方法、定位裝置和數(shù)據(jù)系統(tǒng)通過死鎖發(fā)生后,將與死鎖的產(chǎn)生有關(guān)聯(lián)的事務(wù)使用的數(shù)據(jù)表進(jìn)行組合,根據(jù)相同的數(shù)據(jù)表組合對(duì)應(yīng)的程序執(zhí)行語句查看程序執(zhí)行語句調(diào)用棧,確定死鎖的發(fā)生位置,使得定位死鎖需要人工分析的信息量大大減少,簡單實(shí)現(xiàn)死鎖定位,提高了效率。
文檔編號(hào)G06F9/46GK101425070SQ20081014570
公開日2009年5月6日 申請(qǐng)日期2008年8月11日 優(yōu)先權(quán)日2008年8月11日
發(fā)明者成勇斌 申請(qǐng)人:深圳市金蝶中間件有限公司