1.一種診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,在Oracle數(shù)據(jù)庫應(yīng)用系統(tǒng)運行過程中,通過將系統(tǒng)的應(yīng)用程序和數(shù)據(jù)庫事務(wù)聯(lián)系,關(guān)聯(lián)應(yīng)用層與數(shù)據(jù)庫層,并配以自動化的監(jiān)控方式監(jiān)控事務(wù)的運行時間及運行頻次,針對達(dá)到閾值標(biāo)準(zhǔn)的事務(wù),基于已建立的事務(wù)與應(yīng)用程序模塊的關(guān)聯(lián),精準(zhǔn)定位啟動大事務(wù)和熱點事務(wù)的應(yīng)用程序,診斷Oracle數(shù)據(jù)庫應(yīng)用系統(tǒng)運行過程的大事務(wù)和熱點事務(wù)具體步驟包括:
步驟1:配置應(yīng)用模塊標(biāo)識和Oracle數(shù)據(jù)庫事務(wù)標(biāo)識,設(shè)置事務(wù)閾值;具體為每一個應(yīng)用程序模塊分配唯一能標(biāo)示應(yīng)用程序模塊的標(biāo)識,即應(yīng)用模塊標(biāo)識;為每一個數(shù)據(jù)庫事務(wù)分配唯一能標(biāo)識該事務(wù)的標(biāo)識,即事務(wù)標(biāo)識;同時根據(jù)事務(wù)實際運行經(jīng)驗設(shè)置大事務(wù)閾值及熱點事務(wù)閾值;
步驟2:啟動數(shù)據(jù)庫應(yīng)用系統(tǒng)后臺的工作線程或進(jìn)程;工作線程或進(jìn)程包括:采樣線程或進(jìn)程、篩選線程或進(jìn)程、報警線程或進(jìn)程;
所述采樣線程/進(jìn)程、篩選線程/進(jìn)程及報警線程/進(jìn)程,每一個線程或進(jìn)程能集成為具備相似功能的功能模塊,所有功能模塊與步驟3中的數(shù)據(jù)庫連接池集合形成診斷監(jiān)控系統(tǒng),所述形成的診斷監(jiān)控系統(tǒng)能獨立于數(shù)據(jù)庫外部署,定期訪問數(shù)據(jù)庫,獲取監(jiān)控信息;
所述形成的診斷監(jiān)控系統(tǒng)能獨立配置于數(shù)據(jù)庫外部署,系統(tǒng)能定期性地訪問數(shù)據(jù)庫,獲取監(jiān)控信息,實施實時診斷;
步驟3:初始化專有的數(shù)據(jù)庫連接池模塊,建立應(yīng)用層和數(shù)據(jù)庫層的聯(lián)系:當(dāng)應(yīng)用程序運行時,數(shù)據(jù)庫連接池將從數(shù)據(jù)庫獲取到的數(shù)據(jù)庫事務(wù)關(guān)聯(lián)于應(yīng)用程序,即應(yīng)用模塊標(biāo)識一一對應(yīng)于相關(guān)的數(shù)據(jù)庫事務(wù)標(biāo)識,應(yīng)用程序向數(shù)據(jù)庫傳遞應(yīng)用模塊標(biāo)識,通過應(yīng)用模塊標(biāo)識關(guān)聯(lián)于相應(yīng)的數(shù)據(jù)庫事務(wù),從專有的數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接,建立應(yīng)用程序與數(shù)據(jù)庫事務(wù)的聯(lián)系,保證應(yīng)用程序模塊在執(zhí)行具體SQL語句前,能自動調(diào)用帶關(guān)聯(lián)應(yīng)用模塊標(biāo)識的Oracle存儲過程;
步驟4:事務(wù)采樣:采樣線程周期性地從Oracle數(shù)據(jù)庫應(yīng)用系統(tǒng)的視圖中獲取事務(wù)標(biāo)識的事務(wù)耗時信息,在每一次采樣時,記錄采樣時間點,存儲有關(guān)采集到的事務(wù)的基本信息,包括事務(wù)標(biāo)識,事務(wù)運行狀態(tài)、事務(wù)開始時間、相關(guān)聯(lián)的應(yīng)用模塊、執(zhí)行的動作以及其它能用于描述運行事務(wù)的相關(guān)信息;所有獲取到事務(wù)的相關(guān)信息存入事務(wù)捕獲列表中;
一次采樣結(jié)束,遍歷事務(wù)捕獲列表中每一條事務(wù)記錄,根據(jù)事務(wù)標(biāo)識和應(yīng)用模塊標(biāo)識,在大事務(wù)跟蹤表和熱點事務(wù)跟蹤表查找記錄,并做相應(yīng)的數(shù)據(jù)處理;具體的處理步驟如下:
步驟4-1:根據(jù)事務(wù)標(biāo)識,若當(dāng)前在事務(wù)捕獲列表中遍歷到的事務(wù)在大事務(wù)跟蹤表中已存在,則更新大事務(wù)跟蹤表中的事務(wù)運行時間;若當(dāng)前在事務(wù)捕獲列表中遍歷到的事務(wù)在大事務(wù)跟蹤表中不存在,插入一條關(guān)于該事務(wù)的記錄,新添事務(wù)運行時間,事務(wù)運行狀態(tài)記為“運行中”;
所述更新及新添的事務(wù)運行時間為當(dāng)前采樣時間點與事務(wù)開始時間的差值;
步驟4-2:在大事務(wù)跟蹤表中查詢、提取事務(wù)狀態(tài)為“運行中”的事務(wù)記錄,集中存儲這些事務(wù)記錄入臨時表中,該遍歷該臨時表中的每條記錄,獲取應(yīng)用模塊標(biāo)識和事務(wù)標(biāo)識,根據(jù)從臨時表中獲取的事務(wù)標(biāo)識和應(yīng)用模塊標(biāo)識,查詢所述遍歷到的事務(wù)在事務(wù)捕獲列表中是否存在;
若存在,不做任何處理;若不存在,說明該事務(wù)當(dāng)前已經(jīng)執(zhí)行完畢,執(zhí)行結(jié)束對該事務(wù)的監(jiān)控,更新該事務(wù)的事務(wù)標(biāo)識在大事務(wù)跟蹤表中的事務(wù)狀態(tài)為“運行結(jié)束”;
待遍歷完臨時表中所有事務(wù)記錄,臨時表清空;
步驟4-3:根據(jù)事務(wù)捕獲列表中應(yīng)用模塊標(biāo)識,若當(dāng)前正在運行的應(yīng)用模塊能在熱點事務(wù)跟蹤表中查詢到,更新熱點事務(wù)跟蹤表中該應(yīng)用模塊所對應(yīng)事務(wù)的執(zhí)行頻次,所述更新后的事務(wù)執(zhí)行頻次=更新前的事務(wù)執(zhí)行頻次+1;若當(dāng)前正在運行的應(yīng)用程序在熱點事務(wù)跟蹤表中查詢不到,則插入新記錄,設(shè)置該應(yīng)用模塊所對應(yīng)事務(wù)的執(zhí)行頻次為1;
對同一個事務(wù)保證僅執(zhí)行一次上述更新或插入操作;
步驟5:篩選大事務(wù)和熱點事務(wù),定位啟動事務(wù)運行的應(yīng)用模塊;篩選線程遍歷大事務(wù)跟蹤表和熱點事務(wù)跟蹤表,針對(1)大事務(wù)跟蹤表所有事務(wù)記錄;(2)熱點事務(wù)跟蹤表中所有事務(wù)記錄進(jìn)行篩選,根據(jù)步驟1設(shè)定的大事務(wù)閾值和熱點事務(wù)閾值,判斷遍歷到的事務(wù)是否達(dá)到閾值標(biāo)準(zhǔn),針對達(dá)到標(biāo)準(zhǔn)之上的事務(wù),執(zhí)行如下步驟:
步驟5-1:在大事務(wù)跟蹤表中,遍歷到的事務(wù)滿足:事務(wù)運行時間>大事務(wù)閾值標(biāo)準(zhǔn),從大事務(wù)跟蹤表中提取如下信息:
(1)事務(wù)標(biāo)識;
(2)與事務(wù)關(guān)聯(lián)的應(yīng)用模塊標(biāo)識;
(3)事務(wù)運行時間;
(4)大事務(wù)標(biāo)準(zhǔn)閾值;
步驟5-2:在熱點事務(wù)跟蹤表中,遍歷到的事務(wù)滿足:事務(wù)運行頻次>熱點事務(wù)閾值標(biāo)準(zhǔn),從熱點事務(wù)跟蹤表和大事務(wù)跟蹤表中提取大事務(wù)的相關(guān)信息,包括有:
(1)事務(wù)標(biāo)識
(2)與事務(wù)關(guān)聯(lián)的應(yīng)用模塊標(biāo)識;
(3)事務(wù)運行頻次;
(4)熱點事務(wù)標(biāo)準(zhǔn)閾值;
步驟6:啟動報警線程將原始報警信息、滿足閾值標(biāo)準(zhǔn)的數(shù)據(jù)庫事務(wù)信息及對應(yīng)的應(yīng)用模塊信息組合關(guān)聯(lián),形成易于被閱讀和理解的報警內(nèi)容,并采用即時通訊工具和電子郵件等通訊方式,及時將發(fā)現(xiàn)的大事務(wù)和熱點事務(wù)報告給相應(yīng)的數(shù)據(jù)庫管理人員。
2.根據(jù)權(quán)利要求1所述診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,步驟7:報警線程匯總某一特定時間范圍內(nèi)的大事務(wù)和熱點事務(wù)信息,經(jīng)數(shù)據(jù)處理,形成以可視化形式展示出大事務(wù)和熱點事務(wù)運行的全貌和詳細(xì)的統(tǒng)計報表,包括:
(1)聚類:根據(jù)事務(wù)運行時間對識別出的大事務(wù)進(jìn)行分類,分析屬于不同事務(wù)運行時間等級的大事務(wù)數(shù)量;根據(jù)事務(wù)運行頻次對識別出的大事務(wù)進(jìn)行分類,分析屬于不同事務(wù)運行頻次等級的熱點事務(wù)數(shù)量比例;
(2)應(yīng)用模塊–大事務(wù)關(guān)系圖:針對每個應(yīng)用程序模塊關(guān)聯(lián)到的大事務(wù),繪制大事務(wù)分布比例圖;
(3)應(yīng)用模塊–熱點事務(wù)關(guān)系圖:針對每個應(yīng)用程序模塊管理到的熱點事務(wù),繪制熱點事務(wù)分布比例圖;
(4)繪制大事務(wù)變化趨勢圖:按照需求,提取重點關(guān)注的大事務(wù),根據(jù)運行時間,按照時間段繪制變化趨勢;
(5)繪制熱點事務(wù)變化趨勢:按照需求,提取重點關(guān)注的熱點事務(wù),根據(jù)運行頻次,按照時間段繪制變化趨勢。
3.根據(jù)權(quán)利要求1所述診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,
所述監(jiān)控系統(tǒng)包括:數(shù)據(jù)庫連接池模塊、配置模塊、事務(wù)監(jiān)控模塊、控制模塊、報警模塊;
所述數(shù)據(jù)庫連接池模塊用于識別數(shù)據(jù)庫事務(wù),構(gòu)建系統(tǒng)的應(yīng)用模塊與數(shù)據(jù)庫之間的連接,統(tǒng)一管理因連接而耗費的CPU、數(shù)據(jù)庫、寬帶等資源;應(yīng)用模塊從專有的數(shù)據(jù)庫連接池中獲取數(shù)據(jù)連接,在執(zhí)行SQL前,自動調(diào)用Oracle數(shù)據(jù)庫存儲過程,并向數(shù)據(jù)庫傳遞應(yīng)用模塊標(biāo)識;所述配置模塊:用于設(shè)定閾值的標(biāo)準(zhǔn)值;
事務(wù)監(jiān)控模塊、控制模塊、報警模塊包括對采樣線程/進(jìn)程、篩選線程/進(jìn)程及報警線程/進(jìn)程的控制,對每一個線程或進(jìn)程集成為上述功能模塊。
4.根據(jù)權(quán)利要求3所述的診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,所述形成的診斷監(jiān)控系統(tǒng)能獨立配置于數(shù)據(jù)庫外部署,系統(tǒng)能定期性地訪問數(shù)據(jù)庫,獲取監(jiān)控信息,實施實時診斷。
5.根據(jù)權(quán)利要求3所述的診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,大事務(wù)閾值采用系統(tǒng)運行過程中數(shù)據(jù)庫事務(wù)運行時間作為標(biāo)準(zhǔn);熱點事務(wù)閾值則以應(yīng)用程序模塊所涉及的各事務(wù)運行頻次為標(biāo)準(zhǔn);
閾值配置方式分:統(tǒng)一配置,對所有大事務(wù)設(shè)置的統(tǒng)一閾值,則當(dāng)檢測到Oracle數(shù)據(jù)庫中有事務(wù)SQL執(zhí)行時間超過預(yù)設(shè)值時,不管執(zhí)行該事務(wù)的SQL屬于哪個應(yīng)用模塊,均被判定為大事務(wù)。
6.根據(jù)權(quán)利要求3所述的診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,大事務(wù)閾值采用系統(tǒng)運行過程中數(shù)據(jù)庫事務(wù)運行時間作為標(biāo)準(zhǔn);熱點事務(wù)閾值則以應(yīng)用程序模塊所涉及的各事務(wù)運行頻次為標(biāo)準(zhǔn);
閾值配置方式是根據(jù)不同應(yīng)用模塊的要求定制不同閾值;針對不同的應(yīng)用模塊,分別設(shè)置不同的閾值;只有各應(yīng)用模塊對應(yīng)的事務(wù)達(dá)到指定應(yīng)用模塊的大事務(wù)閾值時,該事務(wù)才會被判斷為大事務(wù)。
7.根據(jù)權(quán)利要求6所述的診斷Oracle數(shù)據(jù)庫大事務(wù)和熱點事務(wù)的方法,其特征在于,UserClient.Message.Send和UserClient.Inquiry.Receive模塊,分別設(shè)置不同的閾值:模塊UserClient.Inquiry.Receive的大事務(wù)閾值設(shè)置為600毫秒,則當(dāng)v$session中模塊標(biāo)識為UserClient.Message.Receive的事務(wù)耗時達(dá)到900毫秒時,則被判斷為大事務(wù)。