一種監控sql語句性能的方法
2023-08-04 01:26:11
一種監控sql語句性能的方法
【專利摘要】本發明提供一種監控SQL語句性能的方法,屬於計算機系統設計領域和資料庫領域,利用讀取oracle的數據字典以及作業系統級的性能數據來監控相關SQL語句的性能,減少對於圖形化界面工具的依賴,該發明解決了傳統圖形化管理工具的高成本、難管理的特點,縮短了資料庫維護人員的處理時間。
【專利說明】—種監控SQL語句性能的方法
[0001]【技術領域】
本發明涉及計算機系統設計領域和資料庫領域,具體涉及一種監控機構化查詢語言(Structured Query Language, SQL) SQL 語句性能的方法。
【背景技術】
[0002]在當前高速發展的資訊時代,IT系統性能問題一直是橫亙在技術人員面前一座難以逾越的大山。各種性能優化的方法被不斷地探索出來。在各種基於資料庫的系統中,為保證語句的查詢效率,IT公司紛紛開發了許多技術,從各個方面提供支持。在SQL的優化和調優方面,Oracle的gridcontrol、OEM等工具,以及其他第三方圖形化工具都做得比較好。但是這些圖形化工具在一些極端情況下,例如資料庫沒有裝資料庫或者第三方工具收費,如何監控資料庫SQL語句性能成為一個問題。
【發明內容】
[0003]此種在字符界面下監控SQL語句性能的方法是通過查詢數據字典來獲SQL語句的性能指標來監控SQL語句的性能本
本發明主要是利用oracle的MMON以及MMNL進程收集的性能數據作為源數據,通過對源數據不同層面的分析得出相應的sql性能數據,根據定義的閥值來給相關人員發送預警郵件或者簡訊,從而提高工作效率。本發明的設計方法是當某個測量值(metrics)超過了預設的限定值(threshold value)後提交警告,並創建新的MMON隸屬進程(ΜΜ0Ν slaveprocess)來進行快照(snapshot),捕獲最近修改過的SQL對象的統計信息,而對於輕量級的且頻率較高的和可管理性相關各種任務交給MMNL進程來完成,這2個進程將獲得數據寫入到WRM$_*和WRH$_*開頭的表中,通過讀取這些表中的數據來獲得相應sql的基本信息-包括sql的執行次數、執行時間、變量值、cpu消耗、io消耗、內存消耗以及各種的等待事件,通過對這些基本指標的監控類來達到監控sql語句性能的目的。
[0004]該設計結構包括=Oracle後臺進程模塊(I)、問題進程模塊(2)、問題sql模塊
(3)、問題sql資源消耗以及執行計劃模塊(4)、接口模塊(5);
oracle後臺進程模塊,後臺進程模塊是集成在oracle內部,有oracle自動來維護,負責來收集客戶端發出的sql語句的相關數據,並根據相關定義來定時運行;
問題進程模塊,通過系統級別定位到問題進程,主要是通過對系統資源的監控包括對cpu的消耗、io的消耗、內存的使用、文件打開數、打開的進程數等資源來得到問題進程;問題sql模塊,通過進程模塊獲得問題進程的id,然後通過字典視圖獲得該進程執行的sql_id,通過sql_id可以獲得該進程執行的sql語句文本;
問題sql資源消耗以及執行計劃模塊,通過sql模塊獲得sql_id來得到sql語句的執行計劃,然後通過分析該執行計劃得到該這個sql語句最消耗資源的原因;
接口模塊,通過對郵件或者簡訊系統接口的調用將問題sql發送給相關維護人員,以便及早發現問題。[0005]本發明的有益效果是:通過在出現性能問題時段MMON以及MMNL進程收集的性能數據為依據,先找到最消耗資源的進程,其中包括最消耗CPU、最消耗內存、最消耗io、執行次數最多、硬解析最多、version過多、consistent read過多、segment最大等,通過找到該進程的id來獲得該進程執行的sql語句,然後通過autotrace、explain、dbms等方法獲得該sql語句的執行計劃。通過對sql語句執行計劃的解讀來獲得該sql語句主要消耗的資源以及他的等待事件,比如發現該語句的io消耗最大,查看他的執行計劃的時候發現是在一個大表的全表掃描、那麼就應該考慮是否應該在相應的欄位上增加索引、是否需要分區、是否需要建立全局或者是本地索引、是否需要對大表的一些歷史數據進行清理、是否這個sql語句需要進行調整等來避免全表掃描,通過對相應的語句進行調整從而使得這類建議更加自動化的提示給管理人員,而且因為是通過sql語句進行相應資源的查詢,這樣更容易實現定製化,可以根據自己的需要在出現問題是發出相應的警告,而且sql語句的接口是標準化的減少了開發的工作量。
[0006]這種字符界面下監控sql語句的方法具有上述優點,使其彌補了在無圖形界面的情況下無法監控sql語句性能的不足,大大提高了 DBA的工作效率與工作質量,減輕了 DBA日常維護的工作量,提高了 DBA對問題的相應速度跟時間,而且由於可定製化使得該方法在無法使用圖形化的情況下有很高的技術價值。
【專利附圖】
【附圖說明】
[0007]附圖1為本發明的邏輯結構圖。
【具體實施方式】
[0008]下面參照附圖,對本發明的內容以監控單個sql性能為例,描述這一結構的實現過程。
[0009]正如
【發明內容】
中所描述的,本發明的邏輯實現結構設計方法主要包括=Oracle後臺進程模塊(I)、問題進程模塊(2)、問題sql模塊(3)、問題sql資源消耗以及執行計劃模塊(4)、接口模塊(5)。
[0010]一種監控SQL語句性能的方法的邏輯結構包括,oracle後臺進程模塊負責收集sql語句的相關信息,包括在規定時間內相關sql語句的執行次數,執行時間,解析次數,子遊標數等,然後將這些數據存放在相應的字典表中,為後續的監控提供最原始的數據;問題進程模塊根據進程資源消耗(包括進程消耗的cpu、內存、打開文件數、語柄數、io)的情況來判斷該進程是否是問題進程,從而決定是否將該進程id發送給sql模塊,該模塊從系統級來判斷,這從2個層面進行性能監控從而獲得全面、完整的性能數據,如果有多個進程消耗資源達到了閥值線,那麼可以根據關心的指標進行排序得到資源消耗進程列表;問題sql模塊根據進程模塊提供的進程id號來獲取該進程的sql_id,然後根據該sql_id來獲取該進程執行的sql文本,根據數據字典信息可以獲得該sql語句的變量值從而判斷是否是因為直方圖或者是綁定變量窺測造成的問題,給開發人員跟維護人員一個可讀的結果;問題sql資源消耗以及執行計劃模塊,通過sql模塊提供的sql_id來獲取該sql的執行計劃以及獲取該sql對資源的消耗情況,從而得到該sql到底在哪一步最消耗資源,進而判斷該sql的執行計劃是否正確;接口模塊,通過郵件系統或者是簡訊系統將該進程執行的sql文本、資源消耗以及執行計劃發送給相關人員從而讓相關人員及時得到相關信息,提高處理問題的相應時間。
【權利要求】
1.一種監控SQL語句性能的方法,其特徵在於該設計結構包括=Oracle後臺進程模塊(I)、問題進程模塊(2)、問題sql模塊(3)、問題sql資源消耗以及執行計劃模塊(4)、接口模塊(5); oracle後臺進程模塊,後臺進程模塊是集成在oracle內部,有oracle自動來維護,負責來收集客戶端發出的sql語句的相關數據,並根據相關定義來定時運行; 問題進程模塊,通過系統級別定位到問題進程,主要是通過對系統資源的監控包括對cpu的消耗、io的消耗、內存的使用、文件打開數、打開的進程數等資源來得到問題進程;問題sql模塊,通過進程模塊獲得問題進程的id,然後通過字典視圖獲得該進程執行的sql_id,通過sql_id可以獲得該進程執行的sql語句文本; 問題sql資源消耗以及執行計劃模塊,通過sql模塊獲得sql_id來得到sql語句的執行計劃,然後通過分析該執行計劃得到該這個sql語句最消耗資源的原因; 接口模塊,通過對郵件或者簡訊系統接口的調用將問題sql發送給相關維護人員,以便及早發現問題。
【文檔編號】G06F17/30GK103793526SQ201410061517
【公開日】2014年5月14日 申請日期:2014年2月24日 優先權日:2014年2月24日
【發明者】初賢哲 申請人:浪潮電子信息產業股份有限公司