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');
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');