[20190221]sql patch 问题.txt --//链接 http://www.itpub.net/thread-2108398-1-1.html ,遇到的问题,重复测试看看. 1.环境: SCOTT@book> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SCOTT@book> create table t01 as select * from dba_objects; Table created. SCOTT@book> create index ind_t01_object_id on t01(object_id); Index created. --//注:我的测试不能分析,分析执行计划会选择索引. BEGIN SYS.DBMS_SQLDIAG_INTERNAL.i_create_patch( sql_text => 'select * from t01 where object_id between 10000 and 30000', hint_text => 'INDEX(T01,IND_T01_OBJECT_ID)', name => 't01_sql_patch'); END; / select * from t01 where object_id between 10000 and 30000; --//可以发现依旧选择全表扫描. BEGIN DBMS_SQLDIAG.drop_sql_patch(name =>'t01_sql_patch'); END; / --//这样不行. select /*+ index(t01) */ * from t01 where object_id between 10000 and 30000; SCOTT@book> @ dpc '' outline PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 8x42dpxgg1fgp, child number 0 ------------------------------------- select /*+ index(t01) */ * from t01 where object_id between 10000 and 30000 Plan hash value: 1880243119 -------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 463 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| T01 | 26993 | 5456K| 463 (1)| 00:00:06 | |* 2 | INDEX RANGE SCAN | IND_T01_OBJECT_ID | 26993 | | 62 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / T01@SEL$1 2 - SEL$1 / T01@SEL$1 Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") INDEX_RS_ASC(@"SEL$1" "T01"@"SEL$1" ("T01"."OBJECT_ID")) END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OBJECT_ID">=10000 AND "OBJECT_ID"<=30000) --//注意提示是INDEX_RS_ASC(@"SEL$1" "T01"@"SEL$1" ("T01"."OBJECT_ID")). --//改写如下,以sys用户执行. BEGIN SYS.DBMS_SQLDIAG_INTERNAL.i_create_patch( sql_text => 'select * from t01 where object_id between 10000 and 30000', hint_text => 'INDEX_RS_ASC(@"SEL$1" "T01"@"SEL$1" ("T01"."OBJECT_ID"))', name => 't01_sql_patch'); END; / select * from t01 where object_id between 10000 and 30000; SCOTT@book> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 043grz1fjh9s7, child number 0 ------------------------------------- select * from t01 where object_id between 10000 and 30000 Plan hash value: 1880243119 -------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 463 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| T01 | 26993 | 5456K| 463 (1)| 00:00:06 | |* 2 | INDEX RANGE SCAN | IND_T01_OBJECT_ID | 26993 | | 62 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / T01@SEL$1 2 - SEL$1 / T01@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OBJECT_ID">=10000 AND "OBJECT_ID"<=30000) ----- - dynamic sampling used for this statement (level=2) - SQL patch "t01_sql_patch" used for this statement - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 33 rows selected. --//OK,现在可以使用索引了.也就是sql patch不能使用平时的提示. --//我个人认为最好使用sql profile,或者sql planbase...sql patch一般使用比较特殊的提示比如bind_ware,result_cache等等。
[20190221]sql patch 问题.txt
来源:这里教程网
时间:2026-03-03 12:58:20
作者:
编辑推荐:
- [20190221]sql patch 问题.txt03-03
- Oracle ASSM表空间存储结构03-03
- ORA-01691:Lob 段 无法通过8192(在表空间XXX中)扩展 解决方案03-03
- oracle 中的temp数据文件过大(需要小于32G)03-03
- Oracle的分区表03-03
- 邮票谜题03-03
- Oracle 表空间和数据文件03-03
- Oracle的SCN显示问题03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle的SCN显示问题
Oracle的SCN显示问题
26-03-03 - WRH$_ACTIVE_SESSION_HISTORY未自动清理导致SYSAUX空间过度增长的处理方法
- Debian监控业务指标配置(手把手教你用Prometheus+Grafana搭建Debian系统性能监控平台)
- 【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
26-03-03 - PLSQL Developer 提示字段名,回车后卡顿解决
PLSQL Developer 提示字段名,回车后卡顿解决
26-03-03 - oracle 正则表达式4个主要函数
oracle 正则表达式4个主要函数
26-03-03 - 数据泵:expdp/impdp
数据泵:expdp/impdp
26-03-03 - 用listagg函数分组实现列转行
用listagg函数分组实现列转行
26-03-03 - Debian网络身份认证详解(手把手教你配置Debian系统下的企业级WiFi与有线网络身份验证)
- Oracle Exadata 存储服务器原理探究
Oracle Exadata 存储服务器原理探究
26-03-03
