ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 利用DBMS_SQLTUNE优化SQL

利用DBMS_SQLTUNE优化SQL

原创 Linux操作系统 作者:cnaning 时间:2012-04-25 15:56:03 0 删除 编辑
DBMS_SQLTUNE优化SQL是在oracle10g才出来的新特性,使用它能很大程度上方便对sql的分析和优化。执行DBMS_SQLTUNE包进行sql优化需要有advisor的权限:
sys>grant advisor to GENLOT_ONLINE;
Grant succeeded.
使用DBMS_SQLTUNE包进行SQL优化,大致可以分为四个步骤:
创建优化任务
执行优化任务
显示优化任务的结果
按照建议执行优化

一、创建优化任务
使用dbms_sqltune.create_tuning_task函数来创建优化任务
函数的返回值为创建的任务名。下面我们创建一个叫 aning_tuning_task 的任务:

DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext :=  'SELECT /*+ rule */ * FROM t ORDER BY id;';
my_task_name := dbms_sqltune.create_tuning_task (sql_text=> my_sqltext,
       bind_list     => null,
       user_name     => 'GENLOT_ONLINE',
       scope         => 'COMPREHENSIVE',
       time_limit    => 60,
       task_name     => 'aning_tuning_task',       
       description   => 'Aning Tuning Task'
    );
END;
/
 
注意:my_sqltext是难点,有的sql语句在匿名快中不认识,需要转意

二、执行优化任务
通过调用dbms_sqltune.execute_tuning_task过程来执行前面创建好的优化任务。
exec dbms_sqltune.execute_tuning_task('aning_tuning_task');
 
三、检查优化任务的状态
通过查看user_advisor_tasks/dba_advisor_tasks视图可以查看优化任务的当前状态。
SELECT status FROM USER_ADVISOR_TASKS WHERE task_name ='aning_tuning_task';
 
四、得到优化任务执行的结果
通过dbms_sqltune.report_tning_task函数可以获得优化任务的结果。
 
SET LONG 999999
set serveroutput on size 999999
SET LINESIZE 1000
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('aning_tuning_task') FROM DUAL;

五、删除优化任务
通过调用dbms_sqltuen.drop_tuning_task可以删除已经存在的优化任务
 
exec dbms_sqltune.drop_tuning_task('aning_tuning_task');

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12457158/viewspace-722212/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-12-12

  • 博文量
    36
  • 访问量
    215332