Oracle10g ADDM和STA使用


    Oracle10g中就推出了新的優化診斷工具:數據庫自動診斷監視工具ADDM和SQL優化建議工具STA。這兩個工具的結合使用,能使DBA節省大量優化時間,也大大減少了系統宕機的危險。簡單點說,ADDM就是收集相關的統計數據到自動工作量知識庫(Automatic Workload Repository AWR)中,而STA則根據這些數據,給出優化建議。

一、ADDM(Automatic Database Diagnostic Monitor)

ADDM提供了一個整體的優化方案。基於一段時間內的AWR snapshots可以執行ADDM 分析,它可以幫我們診斷在這段期間內數據庫可能存在的瓶頸。

1、這個工具的使用非常簡單,它是不需要安裝的。但要求系統參數STATISTICS_LEVEL設置爲TYPICAL(推薦)或ALL,系統默認爲TYPICAL了。
SQL> ALTER SESSION SET STATISTICS_LEVEL = TYPICAL;

2、先獲取到兩次AWR快照的ID
SQL> select snap_id from (SELECT * FROM dba_hist_snapshot ORDER BY snap_id desc) where rownum <= 2;
    SNAP_ID
----------
       1200
       1199

3、然後創建優化任務,並執行
SQL> @?/rdbms/admin/addmrpt.sql
輸入 begin_snap 的值:  1199
輸入 end_snap 的值:  1200
輸入 report_name 的值:  <enter使用默認文件名>
Report written to addmrpt_1_1199_1200.txt
查看addmrpt_1_1199_1200.txt文件內容即可。
此外,如果是RAC環境下,可以執行addmrpti.sql,這腳本的執行,會多出要求輸入DB ID和instance ID的要求。

4、診斷結果分析

第一部分包括一些基礎信息,分析時間段、DB和instance ID&名字、主機名字、Oracle版本、快照範圍、數據庫消耗時間、多少個活動會話。
第二部分就是ADDM發現的問題,並給出的相應建議。
第三部分是關於此次優化建議的一些附加信息。
第四部分是對診斷報告中用到的術語的解釋:
DATABASE TIME:是ADDM的度量數據。從用戶角度看:這是從向數據庫請求開始,消耗在用戶等待響應上的全部時間(不包括網絡響應時間);從數據庫實例角度看:前臺進程消耗在等待一種數據庫資源(例如,IO讀)、CPU運行和等待CPU釋放(隊列等待)的總共時間。ADDM分析的目標就儘量降低這個數字,也就是減少實例響應時間。
AVERAGE DATABASE LOAD:所有能統計到的有多少用戶(也稱爲“活動會話”)等待實例響應。這是實例負荷的度量指標。平均數據庫負荷是由整個分析計算出來的平均負荷。通過“Database Time”除以分析週期時間得到。例如,分析週期時30分鐘,而數據庫運行消耗時間是90分鐘,那就說明平均有3個用戶在等待響應。
IMPACT:每一個找到的問題都有“影響”這一項。“影響”是數據庫消耗時間用於處理這個問題的時間不分。假定我們所找到的這個問題完全解決,那麼數據庫消耗時間就會相應減少“影響”時間。
BENEFIT:每一個找到的問題都“受益”這一項。如果所有建議操作得到實施,ADDM分析估計數據庫消耗時間能減少“受益”的全部時間。

二、STA(SQL Tuning Advisor)

ADDM得出了診斷結果,並給出了優化建議。通常90%的性能問題都是由於應用引起的,而應用問題肯定離不開問題語句。那麼如何優化這些語句呢,以前靠的是DBA的經驗,現在就可以使用STA了。使用STA一定要保證優化器是CBO模式下。

1、創建優化任務並執行
SQL> DECLARE
     my_task_name VARCHAR2(30);
     my_sqltext CLOB;
BEGIN
     my_sqltext := 'select a.table_name, b.object_id from bigtab b, smalltab a';
     my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
           sql_text => my_sqltext,
           user_name => 'DEMO',
           scope => 'COMPREHENSIVE',
           time_limit => 60,
           task_name => 'TEST_sql_tuning_task',
           description => 'Task to tune a query on a specified PRODUCT');
     dbms_sqltune.Execute_tuning_task (task_name => 'TEST_sql_tuning_task');
END;
/
DBMS_SQLTUNE.CREATE_TUNING_TASK 就是用來創建優化任務的函數。其中,sql_text是需要優化的語句,user_name是該語句通過哪個用戶執行,scope是優化範圍(limited或comprehensive),time_limit優化過程的時間限制,task_name優化任務名稱,description優化任務描述。dbms_sqltune.Execute_tuning_task是執行優化的函數。

2、查看優化建議結果
SQL> set long 10000
SQL> set linesize 100
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_sql_tuning_task') FROM DUAL;
優化建議結果分爲三部分:
第一部分是關於這次優化任務的基本信息:如任務名稱、執行時間、範圍、涉及到的語句等等。
第二部分是關於這次優化任務的所找到的問題以及給出的優化建議。前面先給出了問題描述;然後是建議的具體內容;最後是相關注意事項。
最後,報告還給出了原有的查詢計劃,以及採用優化建議以後的查詢計劃的對比。可以看出COST值大大下降。


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