设为首页 加入收藏

TOP

对于自适应游标共享的一点补充(四)
2014-11-24 03:28:40 来源: 作者: 【 】 浏览:5
Tags:对于 适应 游标 共享 一点 补充
bind_aware的实验过程如下:
SQL> alter system flush shared_pool;

系统已更改。

SQL> var vr number;
SQL> exec :vr := 1

PL/SQL 过程已成功完成。

SQL> select /*+ bind_aware */ sum(id) from t1 where rtype = :vr;

   SUM(ID)
----------
	 1

SQL> @show_sql

SQL_TEXT						     EXECUTIONS I I I
------------------------------------------------------------ ---------- - - -
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y Y    --由于使用了bind_aware HINT 

SQL> @show_sel

ADDRESS 	 HASH_VALUE SQL_ID	  CHILD_NUMBER PREDICATE				  RANGE_ID LOW	      HIGH
---------------- ---------- ------------- ------------ ---------------------------------------- ---------- ---------- ----------
00000000DD40C0E0 2679189014 082txyqgv2bhq	     0 =VR						 0 0.000007   0.000008 --根据直方图计算出rtype=1的选择性

SQL> exec :vr := 2

PL/SQL 过程已成功完成。

SQL> select /*+ bind_aware */ sum(id) from t1 where rtype = :vr;

   SUM(ID)
----------
	 5

SQL> @show_sql

SQL_TEXT						     EXECUTIONS I I I
------------------------------------------------------------ ---------- - - -
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y N  --逐步淘汰出内存
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y Y

SQL> @show_sel

ADDRESS 	 HASH_VALUE SQL_ID	  CHILD_NUMBER PREDICATE				  RANGE_ID LOW	      HIGH
---------------- ---------- ------------- ------------ ---------------------------------------- ---------- ---------- ----------
00000000DD40C0E0 2679189014 082txyqgv2bhq	     1 =VR						 0 0.000007   0.000017    --由于rtype=2的选择性不再0.00007~0.00008之间,所以生成新的子游标,由于新游标和旧游标的执行计划相同,所以进行合并,子游标0被设置为非共享,逐步淘汰出内存
00000000DD40C0E0 2679189014 082txyqgv2bhq	     0 =VR						 0 0.000007   0.000008

SQL> exec :vr := 1

PL/SQL 过程已成功完成。

SQL> select /*+ bind_aware */ sum(id) from t1 where rtype = :vr;

   SUM(ID)
----------
	 1

SQL> @show_sql

SQL_TEXT						     EXECUTIONS I I I
------------------------------------------------------------ ---------- - - -
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y N
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      2 Y Y Y   --使用新的子游标,不再使用0号子游标

SQL> @sho_sel
SP2-0310: 无法打开文件 "sho_sel.sql"
SQL> @show_sel

ADDRESS 	 HASH_VALUE SQL_ID	  CHILD_NUMBER PREDICATE				  RANGE_ID LOW	      HIGH
---------------- ---------- ------------- ------------ ---------------------------------------- ---------- ---------- ----------
00000000DD40C0E0 2679189014 082txyqgv2bhq	     1 =VR						 0 0.000007   0.000017
00000000DD40C0E0 2679189014 082txyqgv2bhq	     0 =VR						 0 0.000007   0.000008

SQL> exec :vr := 3

PL/SQL 过程已成功完成。

SQL> select /*+ bind_aware */ sum(id) from t1 where rtype = :vr;

   SUM(ID)
----------
	22

SQL> @show_sql

SQL_TEXT						     EXECUTIONS I I I
------------------------------------------------------------ ---------- - - -
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y N
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      2 Y Y N
select /*+ bind_aware */ sum(id) from t1 where rtype = :vr	      1 Y Y Y

SQL> @show_sel

ADDRESS 	 HASH_VALUE SQL_ID	  CHILD_NUMBER PREDICATE				  RANGE_ID LOW	      HIGH
---------------- ---------- ------------- ------------ ---------------------------------------- ---------- ---------- ----------
00000000DD40C0E0 2679189014 082txyqgv2bhq	     2 =VR						 0 0.000007   0.000034
00000000DD40C0E0 2679189014 082txyqgv2bhq	     1 =VR					
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇游标cursor 下一篇PostgreSQL游标使用举例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)