a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 550|回复: 1

[考试辅导] Oracle技术:Oracle自适应共享游标

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
自顺应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特征之一,首要用于解决以前版本中因为绑定变量窥探导致SQL语句无法获得最佳执行打算的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行打算。本文具体描述了自顺应游标共享并给出示例。   有关绑定变量窥探请参考:Oracle 绑定变量窥探一、示例自顺应游标共享1、建树演示情形view plain SQL> select * from v$version where rownum create table t(id,owner,object_id) as 2  select rownum,owner,object_id from all_objects where rownum alter table t add constraint t_pk primary key(id);
+ B- q% H" v# t  _' Q! p7 q  SQL> exec dbms_stats.gather_table_stats('SCOTT','T',cascade=>true);2 B% T8 p( |" P/ O$ [" L* o$ F
  SQL> select count(id),count(distinct id),min(id),max(id) from t;: K  ?4 J/ Z# r! S
  COUNT(ID) COUNT(DISTINCTID)    MIN(ID)    MAX(ID)
3 X& r% X5 ~# h% k, b$ J---------- ----------------- ---------- ----------* n) A& h5 T9 J) ^
  1000              1000          1       1000 5 u8 E0 ]1 s! ^
       2、使用绑定变量执行SQL语句并获得初度执行情形view plain SQL> var v_id number;SQL> exec :v_id:=9;SQL> set linesize 180 SQL> select sum(object_id) from t where id select * from table(dbms_xplan.display_cursor(null,null,'typical -predicate'));SQL_ID  7qcp6urqh7d2j, child number 0, R1 i$ g, H& j' {
-------------------------------------
) \  _$ j' N# {: p  select sum(object_id) from t where id变量值为9时,使用了正确的执行打算,且预估的行数也切确
' p8 S) X1 R0 m' S! T( {  Plan hash value: 4270555908; e2 z( D1 y( @7 }
-------------------------------------------------------------------------------------
- a$ {% z( u1 K* x& w( y* w| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time |
! X; Q8 o, Z$ t( M- x-------------------------------------------------------------------------------------
& `& D. g5 D3 Q! E5 x* W|   0 | SELECT STATEMENT         |    |      |       |     3 (100)|       |( p8 R! M: M4 c, s' D9 G& X! D
|   1 |  SORT AGGREGATE            |   |   1 |     8 |           |       |
& {* ~- H) G4 R|   2 |   TABLE ACCESS BY INDEX ROWID| T    |     8 |    64 |     3   (0)| 00:00:01 |
, K9 G4 m8 i: }" L: T: ?9 p, @. V* D, j|   3 |    INDEX RANGE SCAN          | T_PK |     8 |       |     2   (0)| 00:00:01 |
5 p; C( D. C+ E- n" S) A-------------------------------------------------------------------------------------- t" k5 X; G& S) h" w1 W

4 O6 N6 L0 Q& }& O- o. m# C) ]- C  SQL> col SQL_TEXT format a45    ——>下面的语句获得自顺应游标共享的3个字段值SQL> select sql_id,sql_text,child_number,executions,is_bind_sensitive,is_bind_aware,is_shareable 2  from v$sql where sql_text like '%select sum(object_id) from t where%' and sql_text not like '%from v$sql%';: c' K' B8 Z* H  O" F  T6 F
  SQL_ID        SQL_TEXT                                      CHILD_NUMBER EXECUTIONS I I I% v5 d5 t5 ^6 D3 U* n$ n' a2 _5 h
------------- --------------------------------------------- ------------ ---------- - - -0 ^* c. f* v& b( c
$ i/ O! n/ g. l
  7qcp6urqh7d2j select sum(object_id) from t where id
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:Oracle自适应共享游标

</p>  4、从头赋值后不雅察看游标共享情形view plain SQL> exec :v_id:=900;SQL> select sum(object_id) from t where id select * from table(dbms_xplan.display_cursor(null,null,'typical -predicate'));
9 F" V7 m8 f0 Q1 b' a: j* Q  SQL_ID  7qcp6urqh7d2j, child number 00 s) A6 d* ^6 b
-------------------------------------2 z3 a& ~) Q  j8 Q: u6 ]; J0 r. l% S
  select sum(object_id) from t where id此次执行的变量值为900,执行打算位上次变量为9的执行打算——>此时为非正确的执行打算,等同于Oracle 9i,10g中的气象Plan hash value: 4270555908
- y4 x- |& _# Y9 D& W3 O% u-------------------------------------------------------------------------------------# f( O5 A8 T/ J3 M- u
  | Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
/ H! \5 ], j8 A2 J-------------------------------------------------------------------------------------
. g: l" ?0 o! Z0 b. s& S" z& z-------------------------------------------------------------------------------------
  H; w6 w8 Y! U9 L| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
$ o7 Z# s+ z6 N6 x0 M' k-------------------------------------------------------------------------------------
6 o5 Z& Q" y0 e& e% [# Q|   0 | SELECT STATEMENT             |      |       |       |     3 (100)|          |
5 r: W* A9 u' p1 D|   1 |  SORT AGGREGATE              |      |     1 |     8 |            |          |3 x4 y/ l) [+ a0 \. M( W2 f
|   2 |   TABLE ACCESS BY INDEX ROWID| T    |     8 |    64 |     3   (0)| 00:00:01 |
0 V$ C' Z2 \2 L8 ~|   3 |    INDEX RANGE SCAN          | T_PK |     8 |       |     2   (0)| 00:00:01 |
; ~/ x- y- L5 \0 G-------------------------------------------------------------------------------------4 i. ^8 f+ r, o
-------------------------------------------------------------------------------------
8 g6 i8 D# k" j. w+ P  ——>自顺应游标共享的3个字段值并未发生任何转变SQL> select sql_id,sql_text,child_number,executions,is_bind_sensitive,is_bind_aware,is_shareable 2  from v$sql where sql_text like '%select sum(object_id) from t where%' and sql_text not like '%from v$sql%';+ D* R9 N- b* x; y' u7 T4 d
  SQL_ID        SQL_TEXT                                      CHILD_NUMBER EXECUTIONS I I I
' x8 L- N$ W1 Z5 a* x, S------------- --------------------------------------------- ------------ ---------- - - -+ ~. h3 f4 I- W( |7 n
  7qcp6urqh7d2j select sum(object_id) from t where id select sum(object_id) from t where id再次执行变量为900值的SQL语句
8 h: `, X; _/ C, A3 {4 d  SUM(OBJECT_ID)
$ Y! M- r0 h3 J0 J: c" c--------------9 B5 T( m9 e+ e
  1826561
; ^( X, }% i9 f2 y4 q  SQL> select * from table(dbms_xplan.display_cursor(null,null,'typical -predicate'));
, b* X' e! @+ Z' F4 ^$ e  SQL_ID  7qcp6urqh7d2j, child number 1
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 21:04 , Processed in 0.174458 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表