SQL PROFILE修改固定执行计划
来源:互联网 发布:京东精选 知乎 编辑:程序博客网 时间:2024/05/16 02:21
发给团队的,有需要的可以参照下。下面是原文,懒的编辑了
SQL PROFILE的用法示例,下周周会给应用DBA演示下。一般只需要步骤三、四就可以完成执行计划的修改和固定,而outline和baseline则需要N多个步骤。
SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名。
我的示例里教了大家偷懒的做法,但是有时间我们还是最好认真把query block的东西学下。
SQL PROFILE还有其他一些牛逼的特性,具体其他细节,周会上再说。
步骤一-------------------------创建测试表,根据DBA_OBJECTS创建,OBJECT_ID上有索引
Create table wxh_tbd as select * from dba_objects;
create index t_3 on wxh_tbd(object_id);
步骤二-------------------------查看SQL默认执行计划,走了索引
explain plan for select * from wxh_tbd 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| WXH_TBD |
|* 2 | INDEX RANGE SCAN | T_3 |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "WXH_TBD"@"SEL$1" ("WXH_TBD"."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(wxh_tbd) */* from wxh_tbd 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| WXH_TBD |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "WXH_TBD"@"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" "WXH_TBD"@"SEL$1")'); ----------从上面Outline Data部分获取到的HINT
dbms_sqltune.import_sql_profile('select * from wxh_tbd where object_id= :a', ----------SQL语句部分
v_hints,
'WXH_TBD', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步骤五-------------------------查看是否生效,已经生效了
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display);
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
--------------------------------------
Note
-----
- SQL profile "WXH_TBD" used for this statement
SQL PROFILE的用法示例,下周周会给应用DBA演示下。一般只需要步骤三、四就可以完成执行计划的修改和固定,而outline和baseline则需要N多个步骤。
SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名。
我的示例里教了大家偷懒的做法,但是有时间我们还是最好认真把query block的东西学下。
SQL PROFILE还有其他一些牛逼的特性,具体其他细节,周会上再说。
步骤一-------------------------创建测试表,根据DBA_OBJECTS创建,OBJECT_ID上有索引
Create table wxh_tbd as select * from dba_objects;
create index t_3 on wxh_tbd(object_id);
步骤二-------------------------查看SQL默认执行计划,走了索引
explain plan for select * from wxh_tbd 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| WXH_TBD |
|* 2 | INDEX RANGE SCAN | T_3 |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "WXH_TBD"@"SEL$1" ("WXH_TBD"."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(wxh_tbd) */* from wxh_tbd 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| WXH_TBD |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "WXH_TBD"@"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" "WXH_TBD"@"SEL$1")'); ----------从上面Outline Data部分获取到的HINT
dbms_sqltune.import_sql_profile('select * from wxh_tbd where object_id= :a', ----------SQL语句部分
v_hints,
'WXH_TBD', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步骤五-------------------------查看是否生效,已经生效了
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display);
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
--------------------------------------
Note
-----
- SQL profile "WXH_TBD" used for this statement
0 0
- SQL PROFILE修改固定执行计划
- SQL PROFILE修改固定执行计划
- 固定执行计划--通过 SQL profile实现
- 使用oracle sql profile固定执行计划
- oracle sql profile固定执行计划
- 使用SQL Profile及SQL Tuning Advisor固定执行计划
- SQL BASELINE修改固定执行计划
- SQL BASELINE修改固定执行计划
- sql profile: 如何使用我们自定义的sql 执行计划来固定原sql执行计划 及 如何优化非绑定变量sql
- Oracle SQL Profile指定执行计划
- 使用spm固定sql执行计划
- 使用outline固定sql执行计划
- SQL Server如何固定执行计划
- Oracle手动固定SQL执行计划
- 使用SQL Profile稳定SQL语句的执行计划
- 手动使用sql profile来进行执行计划的稳固
- 手动使用sql profile来进行执行计划的稳固
- 固定执行计划
- 2016多校联合训练10&&HDU5857 Median
- 十七道海量数据处理面试题与Bit-map详解
- bzoj1008(简单计数问题+快速幂)
- android改变全局字体大小
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
- SQL PROFILE修改固定执行计划
- poj3624 01背包
- This application is modifying the autolayout engine from a background thread, which can lead to engi
- 用MATLAB做聚类分析时非常有用的自定义距离函数和标准化函数
- Codeforces Round #367 (Div. 2) D Vasiliy's Multiset(查找树)
- 多线程多文件查询
- Oracle PL/SQL块
- 在JSP中通过http协议生成excel和word
- 强大的vim配置文件,让编程更随意