【tool】ADDM和STA

来源:互联网 发布:excel2007筛选重复数据 编辑:程序博客网 时间:2024/05/17 23:28
1、ADDM(Automatic Database Diagnostic Monitor)自动诊断监视工具
ADDM是分析快照区间的信息提出的优化建议,它的建议大部分是实例级别的,比如内存参数建议,比如提示硬解析过高这种。
这个工具使用非常简单,不需要安装或配置,只需要系统参数STATISTICS_LEVEL设置为typical或all就行了。

具体操作
取出要进行诊断的快照id
select snap_id,end_interval_time from dba_hist_snapshot order by snap_id desc
执行优化脚本
SQL>@?/rdbms/admin/addmrpt.sql
然后退提示输入起始snap_id和结束snap_id。
执行完后就会在当前目录下生成一个addmrpt_1_10086_10087.txt这样的一个报告文件,这个里面就是诊断工具产生的建议。


在RAC环境下,需要执行addmrpti.sql。


2、STA(SQL Tunning Advisor)SQL调优助手
STA是利用CBO进行sql调优建议的。我们知道CBO从拿到sql语句必须尽快给出执行计划,不然整体效率就没了。
但对于比较复杂的sql,排列组合可能会有上千上万的执行计划,CBO不可能短时间内完成所有执行计划的耗费计算给出最优。
这就是为什么要到STA了。STA能给CBO更多的时间去分析sql。从而提出一些更好的执行计划建议。

具体操作
1、对于具体的sql,可以使用如下过程
declare
  my_task_name varchar2(20);
  my_sql_text CLOB;
begin
  my_sql_text :='select * from wjf_01';                    ------对于sql中单引号的,需要用两个单引号替换,单引号转义
  my_task_name := dbms_sqltune.create_tuning_task(sql_text => my_sql_text,
                                                  user_name => 'WJF',                  ------用户名需大写
                                                  scope => 'COMPREHENSIVE',             
                                                  time_limit => 60,
                                                  task_name => '123_task',
                                                  description => '123_task_des');
  dbms_sqltune.execute_tuning_task(task_name => '123_task');
end;
/


2、执行完过程后,查看调优建议


select dbms_sqltune.report_tuning_task(task_name => '123_task') from dual;
3、删除任务信息
exec dbms_sqltune.drop_tuning_task('123_task');


基本的使用就是以上。


对于仍然存在于v$sql中的语句,可以直接根据sql_id进行查询
1、查出语句对应的sql_id.
select * from v$sql where sql_text like '%wjf%'
2、执行以下过程
declare
  my_tuning_task varchar2(30);
begin
  my_tuning_task := dbms_sqltune.create_tuning_task(sql_id => '2k5a62jsuptb2', 
                                                    scope => 'comprehensive',
                                                    time_limit  => 60,
                                                    task_name  => '123_task',
                                                    description => '123_task_des');
  dbms_sqltune.execute_tuning_task(my_tuning_task);
end;
3、查看调优建议
select dbms_sqltune.report_tuning_task('123_task') from dual;
4、删除任务信息
exec dbms_sqltune.drop_tuning_task('123_task');




对于从awr报告中提取的语句,可以使用如下方法
1、执行以下过程
declare
     my_task_name varchar2(30);
begin
     my_task_name := dbms_sqltune.create_tuning_task(
          begin_snap      => 2835,
          end_snap        => 2836,
          sql_id          => '9npaukths18ad',
          scope           => 'comprehensive',
          time_limit      => 60,
          task_name       => '123_task',
          description     => '123_task_des'
     );
     dbms_sqltune.execute_tuning_task (task_name => '123_task');
  end;
2、查看调优建议
select dbms_sqltune.report_tuning_task('123_task') from dual;
3、删除任务信息
exec dbms_sqltune.drop_tuning_task('123_task');

 
0 0
原创粉丝点击