设为首页 收藏本站
查看: 676|回复: 1

[经验分享] Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor )

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-12-2 08:53:38 | 显示全部楼层 |阅读模式
  在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 Tuning Advisor :
1. 在匿名PL/SQL块中,为SQL 语句定义调整任务。
declare   
    tune_task_name varchar2(30)     ;  
    bad_sql_stmt clob;  
begin  
    bad_sql_stmt := 'select distinct id from demo.txcl';  
    tune_task_name := dbms_sqltune.create_tuning_task  
        ( sql_text => bad_sql_stmt,  
          user_name => 'DEMO',  
          scope => 'COMPREHENSIVE',  
          time_limit => 60,  
          task_name => 'xcl_sql_tuing_task',  
          description => 'See what is wrong with the SELECT'  
            ) ;  
end;  
/  
2.  设置任务时指定的时限值是60分钟.
begin  
    dbms_sqltune.set_tuning_task_parameter  
        (task_name => 'xcl_sql_tuing_task',  
         parameter => 'TIME_LIMIT',  
         value => 30  
         );  
end;  
/  
3. 使用EXECUTE_TUNING_TASK过程启动调整任务
begin  
    dbms_sqltune.execute_tuning_task   
     (task_name => 'xcl_sql_tuing_task');  
end;  
/  
4. 通过连接DBA_ADVISOR_TASKS和V$ADVISOR_PROGRESS来查任务状态
select task_name,status,sofar,totalwork
from dba_advisor_tasks   
join v$advisor_progress using(task_id)   
where task_name = 'xcl_sql_tuing_task';  
5. 查看调整任务给出的建议
select dbms_sqltune.report_tuning_task('xcl_sql_tuing_task') from dual;  

SQL Access Advisor:
使用 dbms_advisor.quick_tune来对单个SQL语句进行调整
   它的执行很像SQL Tuning Advisor,但执行的分析层次却深入得多,生成的建议也更多。

1. 指定一个存放输出文件的目录
--输出文件目录  
create directory tune_scripts as '/demo/tune_scripts';  
2.采集,分析并给出建议
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两个用户的表的顾问功能,所能要分析的表不要用这两个用户建。

官网相关文档: http://docs.oracle.com/cd/E11882 ... isor.htm#PFGRF94881



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-10858-1-1.html 上篇帖子: ocp 1Z0-051 1-22题解析 下篇帖子: Oracle 体系结构

尚未签到

发表于 2014-1-1 06:37:19 | 显示全部楼层
爱情里没有谁对谁错,因为没有一个标准可以衡量

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表