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_SQLSTATS
-DBA_ADVISOR_SQLPLANS