11g新特性-自動sql調優(Automatic SQL Tuning)


11g新特性-自動sql調優(Automatic SQL Tuning)

在Oracle 10g中,引進了自動sql調優特性。此外,ADDM也會監控捕獲高負載的sql語句。

在Oracle 11g中,通過運行sql tuning advisor加強了自動sql調優功能。默認情況下是每天夜間通過自動任務的方式運行”自動sql調優“。

 

自動sql調優的過程:

1.識別需要調優的sql語句  根據AWR中的CPU和I/O負載來識別

2.調優,生成新的sql profile  

  在維護窗口(maintenance window),自動sql調優任務運行時,上一步識別出的sql語句會被“sql tuning advisor”調優。並產生相應的sql profiles。如果發現有統計信息丟失或過期,會通知GATHER_STATS_JOB

3.測試新的sql profile  benefit%=(time_old – time_new)/(time_old)

4.執行符合標准的新的sql profile  

  可以查看dba_sql_profiles,有哪些sql profiles是被數據庫自動執行的(type 列)

5.DBA可以產生自動sql調優活動的報告。可以確認產生的sql profile是否有效、刪除新產生的sql profile等。

自動sql調優不會進行調優的sql:

-Ad hoc語句和很少重復執行的sql

-並行查詢

-長時間運行的查詢。對於長時間運行的sql,如果使用產生的sql profile進行測試,還是會需要長時間運行,就會忽略這樣的sql。如果使用新產生的sql profile會顯著減少時間,就不會忽略這類長時間運行的sql。

-遞歸sql

-DDL語句

-使用了insert、delete的DML語句 上面的語句,可以手動使用SQL Tuning Advisor進行調優。

上面的語句,可以手動使用SQL Tuning Advisor進行調優。

 

配置自動sql調優

使用dbms_sqltune包進行配置。 在maintenance window,自動sql調優特性會啟動一個job(sys_auto_sql_tuning_task)。產生一個需要調優的sql 列表,然后根據重要性一次進行調優。 一般這個job會運行一小時,可以設置該job設置: dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK','TIME_LIMIT',7200);

begin
    dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK','LOCAL_TIME_LIMIT',1400);
    dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK','ACCEPT_SQL_PROFILES','TRUE');
    dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK','MAX_SQL_PROFILES_PER_EXEC',50);
    dbms_sqltune.set_tuning_task_parameter('SSY_AUTO_SQL_TUNING_TASK','MAX_AUTO_SQL_PROFILES',10002);
end;

 管理自動sql調優任務

1.開啟自動sql調優

begin
     dbms_auto_task_admin.enable(
          client_name => 'sql tuning advisor',
          operation => 'NULL',#在所有維護窗口都開啟
          window_name => 'NULL');
end;

2.關閉自動sql調優

begin
     dbms_auto_task_admin.disable(
          client_name => 'sql tuning advisor',
          operation => 'NULL',
          window_name => 'NULL');
end;

生成文本格式的自動sql調優建議報告:

SQL> variable my_rept CLOB;
SQL> begin 
     :my_rept := dbms_sqltune.report_auto_tuning_task(
          begin_exec=>NULL,
          end_exec=>NULL,
          type=>'TEXT',
          level=> 'TYPICAL',
          section=>'ALL',
          object_id=>NULL,
          result_limit=>NULL);
     end;
SQL> print :my_rept

相關視圖:

-DBA_ADVISOR_EXECUTIONS
-DBA_ADVISOR_SQLSTATS
-DBA_ADVISOR_SQLPLANS  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM