ORACLE10G以后版本的SQL Tuning advisor可以從以下四個方面給出優化方案
? (1)為統計信息丟失或失效的對象收集統計信息
? (2)考慮優化器的任何數據偏差、復雜謂詞或失效的統計信息
? (3)重新構建 SQL 以優化性能
? (4)提出新索引建議
下面來實際測試:
1、為SQL_id創建一個STA( SQL Tuning advisor) 分析任務 (使用SYS用戶執行)
SQL> variable task_li_test varchar2(2000);
SQL>exec :task_li_test:=dbms_sqltune.create_tuning_task(sql_id=>'1z9atcd704psu',time_limit=>600,task_name=>'li_sql_1');
?
2、執行上面創建的STA (需要一定的時間)
SQL> exec dbms_sqltune.execute_tuning_task(task_name=>'li_sql_1');
?
3、查詢優化任務創建與執行的情況
select a.owner,b.task_id,b.task_name,a.created from dba_advisor_tasks a,dba_advisor_log b where a.task_id=b.task_id and a.task_name= 'li_sql_1'
owner |
task_id |
task_name |
created |
SYS |
106698 |
? ? li_sql_1 |
2013-9-14 16:57 |
?
4、查看任務優化報告 (優化的詳細內容)
SQL>select dbms_sqltune.report_tuning_task( 'li_sql_1' ) from dual;
?
5、接受建議的 SQL 概要文件,即創建SQL_Profle
SQL> execute dbms_sqltune.accept_sql_profile(task_name => 'li_sql_1',task_owner =>'SYS', replace => TRUE);
?
6、查看第5步創建起來的SQL_Profile信息
SQL>select a.name,a.task_id,a.created from dba_sql_profiles a,dba_advisor_log b where a.task_id=b.task_id and b.task_name= 'li_sql_1'
NAME |
TASK_ID |
?CREATED |
SYS_SQLPROF_01411bdf99410002 |
106699 |
? ? 14-9月 -13 05.49.00.000000 下午 |
?
7、再次執行SQLID為‘1z9atcd704psu’的語句
7.1、執行時間由原來的6分鐘降為3秒
7.2、查看執行計劃,執行計劃中包含下面信息,說明是使用了創建的SQL_Profile所起到的效果
? - SQL profile SYS_SQLPROF_01411bdf99410002used for this statement
?
8、刪除SQL_Profile
SQL>exec dbms_sqltune.drop_sql_profile( name => ' SYS_SQLPROF_01411bdf99410002 ' );
?
9、刪除優化任務
SQL> exec dbms_sqltune.drop_tuning_task(task_name => 'li_sql_1');
? 本文為“踩點”原創,轉發請說明出處。謝謝!
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
