使用hyperpacer實現AWR報告的同步收集

上一篇日誌裏說了一下資源同步收集的實現。
由於日常使用最多的數據庫ORACLE,因此,又打起了oracle的AWR報告的主意。
過去我們執行測試,都是執行開始和結束分別手動建立一個快照,然後需要這部分數據的時候再去獲取AWR報告查看。
但 是有的時候忙亂起來或者一個任務項交給別人來做就經常會有忘記建立快照的情況,這時候就只能通過ORACLE自己默認建立的快照來獲取了。但是我們知道 ORACLE默認是一個小時才建立一個快照,且建立快照的時間點很難跟我們的測試過程能匹配到一起,這樣我們獲取的報告就有了很多的干擾項。
那麼,能不能使用hyperpacer同步把AWR報告也收集過來呢,如果可以集成到腳本中,那麼獲取AWR報告的時候使用的始末快照就能跟我們的測試過程完全匹配了,也防止了因爲疏忽忘記建立快照的情況。
仔細研究了hyperpacer提供的JDBC採樣器,發現hyperpacer完全可以勝任這個需求。
於是大概梳理了一下思路:
首先:
在初始化場景內:添加JDBC採樣器,分別進行兩個操作:一個是通過dbms_workload_repository這個包提供的create_snapshot()建立快照,然後查詢當前最大的快照號,也就是我們剛剛建立的快照,作爲測試的起始快照號;
在收尾場景內:添加JDBC採樣器,同樣建立快照,並查詢當前最大快照號,作爲測試的終止快照號;再多添加一個JDBC採樣器,通過包dbms_workload_repository提供的方法awr_report_html獲取兩個快照間的AWR報告。

--------------------

理想很美好,但是實際實現起來確發現沒有那麼簡單。原來想當然的是在初始化場景裏先獲取測試開始的快照號,然後作爲變量傳給收尾場景的JDBC採樣器。但是執行的時候一直報變量無效。
想了好久不知道是什麼原因,最後忽然想明白原因了,沒想到學習使用了這麼長時間的hyperpacer,最後在小--(陰)--(溝)---(裏)翻了船。
獲取初始快照號的採樣器建在初始化場景下,這也就決定了這個採樣器的作用域只能在初始化場景下,我把它輸出的變量傳給收尾場景的採樣器,超出了作用域自然就無法識別了。
汗~~~~~~~~~~

於是調整了一下思路,既然無法完美實現,那麼只好退而求其次,初始化場景只建立快照,獲取這個快照號的採樣器移到收尾場景內。於是最終實現後就是如圖下面的樣子:
wKioL1cq8DujPmi7AAerm9wxYUg385.jpg

可以看到在快照瀏覽器裏確實已經取到awr的文本,只要拷出來保存爲HTML文件就可以了。

這樣的實現爲什麼我說不完美呢?因爲,就如我們前面所說,ORACLE默認情況下自己也會隔一個小時做一個快照,假設我們的測試過程耗時較長,超過了一個小時,那麼,我們再去取最大的兩個快照號時,實際上取到的是下圖所示的紅框內的統計數據。
wKiom1cq733Cnm6wAABt1pwA8Ec130.jpg
如果我們能預先知道測試運行多長時間,我們還可以手動修改一下提取快照號的SQL,但是如果沒辦法預知測試耗時,那就沒辦法支持了。

真心希望hyperpacer能夠再增加一個全局變量配置的地方,通過對該變量讀寫進行跨域的參數傳遞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章