SQL Access Advisor (SQL 工作量運行 "訪問指導")

Oracle數據庫出現性能問題時,使用Oracle本身的工具包,給出合理的調優建議是比較省力的做法。


下面兩種包的介紹及具體做法。

       SQL Tuning Advisor 粒度最小的調整工具.

將一條或多條SQL語句做爲輸入內容,分析所有訪問路徑,然後生成改進SQL語句的建議,並提出索引,物化視圖和分區方案來提高應用程序的總體性能。
另外,在維護窗口中,Oracle也會針對Automatic Workload Repository(AWR) 來確定和記錄的高負載語句自動化運行SQL Tuning Advisor

SQL Access Advisor 

它涉及工作量中所有SQL語句,並提出索引,特化視圖和分區方案來提高應用程序的總體性能。

小區別:

SQL Tuning Advisor 分別調整每條SQL語句(我之前的博文已經介紹這種方式如何使用)

SQL Access Advisor 同時調整所有SQL語句


SQL Access Advisor:


使用 dbms_advisor.quick_tune來對單個SQL語句進行調整
它的執行很像SQL Tuning Advisor,但執行的分析層次卻深入得多,生成的建議也更多。

1. 指定一個存放輸出文件的目錄

?

1
2
--輸出文件目錄
create directory tune_scripts as '/demo/tune_scripts';

2.採集,分析並給出建議


?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
declare
    v_task_name VARCHAR2(255);
    v_sql_stmt  VARCHAR2(4000);
 
    v_tune_sql_filename VARCHAR2(255);
    v_cfile_directory VARCHAR2(255);
begin
    v_sql_stmt := 'select  * from  demo.txcl t where t.id = :1 ';
    v_task_name :='tune_demo_txcl';
 
    v_tune_sql_filename :=  'tune_demo_txcl.sql';
    v_cfile_directory := 'TUNE_SCRIPTS';
 
    dbms_stats.gather_table_stats(
        ownname => 'DEMO',
        tabname => 'TXCL',
        cascade => true);
     
    --dbms_advisor.reset_task(v_task_name);
 
    --分析並得到建議
    dbms_advisor.quick_tune(DBMS_ADVISOR.SQLACCESS_ADVISOR,
                v_task_name,
                v_sql_stmt);
 
    --將建議輸出到指定文件中
    -- select * from dba_advisor_actions where task_name ='tune_demo_txcl' ;
    -- select * user_advisor_sqla_wk_stmts where task_name ='tune_demo_txcl'  ;
    dbms_advisor.create_file(
        dbms_advisor.get_task_script(v_task_name),
        v_cfile_directory,
        v_tune_sql_filename
        );
 
 
    --刪除任務
    dbms_advisor.delete_task(v_task_name); 
 
exception
    when others then
        dbms_output.put_line(sqlerrm);
end;

/


常見錯誤:

ORA-13600: error encountered in Advisor

QSM-00794: the statement can not be stored due to a violation of the invalid table reference filter

原因是dbms_advisor.quick_tune不支持爲SYS和SYSTEM兩個用戶的表的顧問功能,所能要分析的表不要用這兩個用戶建。

官網相關文檔: 

https://docs.oracle.com/cd/E11882_01/server.112/e16638/advisor.htm#PFGRF94881


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