高级SQL优化(三) 经常使用优化工具 ——《12年资深DBA教你Oracle开发与优化——sql
高级SQL优化(一) ——《12年资深DBA教你Oracle开发与优化——性能优化部分性能优化
1 autotrace
工具
set autotrace on性能
2 使用SQL调优顾问优化
删除掉bigtab和smalltab上的全部索引:spa
declareblog
my_task_name varchar2(30);索引
my_sqltext clob;ip
begin开发
my_sqltext := 'select count(*) from bigtable a, smalltable b where a.object_name=b.table_name';
my_task_name := DBMS_SQLTUNE.create_tuning_task(
sql_text => my_sqltext,
user_name => 'ZJ',
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => 'bigtable_jointo_smalltab_sql',
description => '优化smalltable 和 bigtable链接的例子');
Dbms_Sqltune.execute_tuning_task(task_name => 'bigtable_jointo_smalltab_sql');
end;
建立完成后验证是否完成:
select task_name,status from user_advisor_log where task_name = 'bigtable_jointo_smalltab_sql';
也能够经过SQL语句来查看结果,此方法是咱们最喜欢的方法:
select dbms_sqltune.report_tuning_task('bigtable_jointo_smalltab_sql') from dual;
/* 依据优化结果建立索引*/
create index idx_smalltable_tablename on smalltable(table_name) tablespace users;
create index idx_bigtable_tablename on bigtable(object_name) tablespace users;
实时SQL监视(real-time SQL Monitorning)是Oracle 11g的另一个新功能,其做用是容许用户监视正在执行的SQL。默认状况下,当使用并行查询、或者当SQL执行的CPU或I/O超过5秒钟时会自动启动。
也能够使用优化提示强制使用实时SQL监视功能,以下:
select /*+ monitor */
count(*)
from bigtab a, smalltab b
where a.object_name = b.table_name
若是要强制不使用实时SQL监视功能,则也能够使用优化提示:
select /*+ no_monitor */
count(*)
from bigtab a, smalltab b
where a.object_name = b.table_name
与实时SQL监视相关的系统视图包括:
uV$SQL_MONITOR
uV$SQL_PLAN_MONITOR
uV$ACTIVE_SESSION_HISTORY
uV$SESSION
uV$SESSION_LONGOPS
uV$SQL
uV$SQL_PLAN
对于刚刚监视的结果,能够使用DBMS包读取:
select dbms_sqltune.report_sql_monitor from dual;