SQL PROFILE的用法
来源:互联网 发布:淘宝汽车饰品名字 编辑:程序博客网 时间:2024/05/18 03:21
一般只需要步骤三、四就可以完成执行计划的修改和固定,而outline和baseline则需要N多个步骤。
SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名,
SQL PROFILE还有其他一些牛逼的特性。
Create table LX_DB as select * from dba_objects;
create index idx_lxdb_id on LX_DB(object_id);
步骤二-------------------------查看SQL默认执行计划,走了索引
explain plan for select * from LX_DB where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-------------------通过指定outline可以获取到系统为我们生成的hint
-----------------------------------------------
| Id | Operation | Name |
-----------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| LX_DB |
|* 2 | INDEX RANGE SCAN | idx_lxdb_id |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "LX_DB"@"SEL$1" ("LX_DB"."OBJECT_ID"))
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步骤3-------------------------如果我们想让它走全表扫描,获取全表扫描HINT
explain plan for select /*+ full(LX_DB) */* from LX_DB where object_id= :a;-----------增加HINT
select * from table(dbms_xplan.display(null,null,'outline'));------------可以看到全表扫描的hint已经为我们生成了,我们选取必要的hint就OK了,其他的可以不要
-------------------------------------
| Id | Operation | Name |
-------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| LX_DB |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "LX_DB"@"SEL$1")
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步骤4--------------------------使用sql profile
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('FULL(@"SEL$1" "LX_DB"@"SEL$1")'); ----------从上面Outline Data部分获取到的HINT
dbms_sqltune.import_sql_profile('select * from LX_DB where object_id= :a', ----------SQL语句部分
v_hints,
'LX_DB', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步骤五-------------------------查看是否生效,已经生效了
explain plan for select * from LX_DB where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| LX_DB |
--------------------------------------
Note
-----
SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名,
SQL PROFILE还有其他一些牛逼的特性。
我的示例里教了大家偷懒的做法,但是有时间我们还是最好认真把query block的东西学下。
Create table LX_DB as select * from dba_objects;
create index idx_lxdb_id on LX_DB(object_id);
步骤二-------------------------查看SQL默认执行计划,走了索引
explain plan for select * from LX_DB where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-------------------通过指定outline可以获取到系统为我们生成的hint
-----------------------------------------------
| Id | Operation | Name |
-----------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| LX_DB |
|* 2 | INDEX RANGE SCAN | idx_lxdb_id |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "LX_DB"@"SEL$1" ("LX_DB"."OBJECT_ID"))
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步骤3-------------------------如果我们想让它走全表扫描,获取全表扫描HINT
explain plan for select /*+ full(LX_DB) */* from LX_DB where object_id= :a;-----------增加HINT
select * from table(dbms_xplan.display(null,null,'outline'));------------可以看到全表扫描的hint已经为我们生成了,我们选取必要的hint就OK了,其他的可以不要
-------------------------------------
| Id | Operation | Name |
-------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| LX_DB |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "LX_DB"@"SEL$1")
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步骤4--------------------------使用sql profile
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('FULL(@"SEL$1" "LX_DB"@"SEL$1")'); ----------从上面Outline Data部分获取到的HINT
dbms_sqltune.import_sql_profile('select * from LX_DB where object_id= :a', ----------SQL语句部分
v_hints,
'LX_DB', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步骤五-------------------------查看是否生效,已经生效了
explain plan for select * from LX_DB where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| LX_DB |
--------------------------------------
Note
-----
- SQL profile "LX_DB" used for this statement
**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name: guoyJoe
QQ: 252803295
Email: oracledba_cn@hotmail.com
Blog: http://blog.csdn.net/guoyJoe
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM
_____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!
答案在:http://blog.csdn.net/guoyjoe/article/details/8624392
Oracle@Paradise 总群:127149411
Oracle@Paradise No.1群:177089463(已满)
Oracle@Paradise No.2群:121341761
Oracle@Paradise No.3群:140856036
- SQL PROFILE的用法
- sql server profile 的使用
- sql profile
- sql profile
- sql profile
- SQL PROFILE
- EBS中取profile值的用法
- EBS中取profile值的用法
- EBS中取profile值的用法
- set statistics profile on的用法
- SQL Profiles-PartIII -- profile的控制
- show profile sql分析的好工具
- 如何用sql profile 找出执行慢的sql
- 使用SQL Profile稳定SQL语句的执行计划
- Linux 环境下/etc/profile和/etc/profile.d 的区别和用法
- mysql中profile用法
- JDBC SQL Profile
- SQL Profile介绍
- [CSS]层叠样式表CSS的基本语法和继承问题
- MyBatis 入门到精通(三) 高级结果映射 .
- ios中的设备判断
- 电子基础知识问答
- 【转载】电脑店超级U盘装系统-设置U盘启动
- SQL PROFILE的用法
- 【整理】MySQL引擎
- android - 自定义(组合)控件 + 自定义控件外观
- 关于h264的图像、帧、片、NALU
- ASP.NET MVC3中关于httppost提交
- oracle natural using join 区别
- JDBC相关
- 使用System.Timers.Timer实现协同
- hibernate学习笔记17