作为ORACLE DBA对SQL优化是必备的技能,常用的方法就是看执行计划,加hint或者修改SQL写法,但现实的工作中,往往修改应用的SQL是非常困难的,特别是对电信、银行这个行业,修改应用程序过程十分繁杂,有没有办法不修改SQL就可以达到优化SQL执行计划的方法呢?答案是肯定的,从ORACLE 10g开始ORACLE提供了自动优化功能,经过一段时间的总结运用,和大家分享一下如何运用DBMS_SQLTUNE对SQL进行优化。
在实际工作中,我们常遇到三种情况下的SQL类型的SQL优化
1.完整的SQL语句,无绑定变更(最简单的一种,也是不常见的一种)
2.通过AWR获得的SQL语句,这种SQL有绑定变量
3.在V$SQL不存在的SQL语句
针对以上三种情况的优化,和大家分享一下我的优化语句,既然要用这个包,必须要有相应的权限
一、执行DBMS_SQLTUNE所需要的权限
CREATE ANY SQL_PROFILE,
DROP ANY SQL_PROFILE
ALTER ANY SQL_PROFILE
因此要想普通用户执行DBMS_SQLTUNE包进行优化,需要赋相应的权限
二、无绑定变量SQL的优化
这种是最简单的一种,通常开发的同事用的比较多,详细SQL如下:
执行优化任务:
declare
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := 'select * from orabpel.cube_scope';
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_text => my_sqltext,
user_name=> 'orabpel',
scope=> 'COMPREHENSIVE',
time_limit=> 60, --优化限时60s
task_name=> 'wxw_sql_tuning_task',