ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用sql profile来固定执行计划

用sql profile来固定执行计划

原创 Linux操作系统 作者:wei-xh 时间:2011-06-03 15:55:38 0 删除 编辑
今天一个SQL用BASELINE没搞定,BASELINE没起作用,原因还在找。
忽然想起了SQL PROFILE,就试了一下,嘿嘿,果然还不错,起作用了。
以下是个用法示例:
根据DBA_OBJECTS创建个表,OBJECT_ID列上创建索引。
按照OBJECT_ID去查询,默认的走了索引,我们看看如何让他通过SQL PROFILE去走全表扫描。

declare
     v_hints sys.sqlprof_attr;
   begin
     v_hints := sys.sqlprof_attr('full(wxh_tbd@sel$1)');----------HINT部分
     dbms_sqltune.import_sql_profile('select count(*) from wxh_tbd where object_id=:a',----------SQL语句部分
                                     v_hints,
                                     'SQLPROFILE_NAME3',--------------------------------PROFILE 的名字
                                     force_match => true);
   end;
   /
   
select count(*) from wxh_tbd where object_id=:a;

Execution Plan
----------------------------------------------------------
Plan hash value: 853361775

------------------------------------------------------------------------------
| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |         |     1 |    13 |   144   (3)| 00:00:01 |
|   1 |  SORT AGGREGATE    |         |     1 |    13 |            |          |
|*  2 |   TABLE ACCESS FULL| WXH_TBD |   198 |  2574 |   144   (3)| 00:00:01 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("OBJECT_ID"=TO_NUMBER(:A))

Note
-----
   - SQL profile "SQLPROFILE_NAME3" used for this statement-----------------------我们看到SQL PROFILE 起作用了



SQL PROFILE的好处是,你的SQL语句不区分大小写,回车之类的,只要文本一样就OK,这个有点比较赞。
删除SQL PROFILE
通过select * from dba_sql_profiles a;查询出PROFILE 的NAME,
然后
exec dbms_sqltune.drop_sql_profile('SYS_SQLPROF_012ed61fe9bd0000');  来删除

不过用SQL PROFILE,写HINT的时候,我测试的情况是,必须写上查询块的名称,这在一定程度上,要求对查询块比较熟悉。   

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

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2315117