测试在cursor_sharing为force情况下执行计划的共享情况

1、首先,我们确定cursor_sharing参数
SQL> show parameter cursor_sharing

NAME                                 TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
cursor_sharing                       string
FORCE
SQL> select spid from v$process where addr in(select paddr from v$session where
sid in(select sid from v$mystat where rownum=1));

SPID
------------
8392
2、测试常量发生变化时,执行计划的共享情况
SQL> alter session set sql_trace=true;

Session altered.

SQL> select * from tb_test_connect_by where id=4;

no rows selected

SQL> select * from tb_test_connect_by where id=5;

        ID
----------
         5

SQL> select * from tb_test_connect_by where id=6;

        ID
----------
         6

SQL> alter session set sql_trace off
  2  ;
alter session set sql_trace off
                            *
ERROR at line 1:
ORA-00922: missing or invalid option


SQL> alter session set sql_trace=off;
alter session set sql_trace=off
                            *
ERROR at line 1:
ORA-00922: missing or invalid option


SQL> alter session set sql_trace=false;

Session altered.

trace结果:
.....

select * 
from
 tb_test_connect_by where id=:"SYS_B_0"


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        4      0.00       0.01          0          0          0           0
Execute      4      0.00       0.00          0          0          0           0
Fetch        5      0.00       0.00          0          3          0           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       13      0.00       0.01          0          3          0           2

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61  

Rows     Row Source Operation
-------  ---------------------------------------------------
      0  INDEX UNIQUE SCAN SYS_C0025401 (cr=1 pr=0 pw=0 time=24 us)(object id 57978)
.....
       从上面的分析结果来看,在cursor_sharing为force时,确实会把常量替换成一个系统自带的绑定变量,这样,就可以减少硬解析次数,只是当列的值有倾斜时,可能会导致执行计划出现问题。

3、测试在绑定变量名称不一样的情况下,执行计划的共享情况

SQL> alter session set sql_trace=true;

Session altered.

SQL> variable id number;
SQL> variable id10 number;
SQL> variable id11 number;
SQL> exec :id=1;
BEGIN :id=1; END;

         *
ERROR at line 1:
ORA-06550: line 1, column 10:
PLS-00103: Encountered the symbol "=" when expecting one of the following:
:= . ( @ % ; indicator
The symbol ":= was inserted before "=" to continue.


SQL> exec :id:=1

PL/SQL procedure successfully completed.

SQL> exec :id10:=2

PL/SQL procedure successfully completed.

SQL> exec :id11:=3

PL/SQL procedure successfully completed.

SQL> select * from tb_test_connect_by where id=:id;

        ID
----------
         1

SQL> select * from tb_test_connect_by where id=:id10;

        ID
----------
         2

SQL> select * from tb_test_connect_by where id=:id11;

        ID
----------
         3

SQL> alter session set sql_trace=false;

Session altered.

trace文件:
......
select * 
from
 tb_test_connect_by where id=:id


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.04          0          0          0           0
Fetch        2      0.00       0.00          0          1          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.04          0          1          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61  

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  INDEX UNIQUE SCAN SYS_C0025401 (cr=1 pr=0 pw=0 time=79 us)(object id 57978)

********************************************************************************

select * 
from
 tb_test_connect_by where id=:id10


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.01          0          0          0           0
Fetch        2      0.00       0.00          0          1          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.01          0          1          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61  

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  INDEX UNIQUE SCAN SYS_C0025401 (cr=1 pr=0 pw=0 time=16 us)(object id 57978)

********************************************************************************

select * 
from
 tb_test_connect_by where id=:id11


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0          1          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.01          0          1          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61  

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  INDEX UNIQUE SCAN SYS_C0025401 (cr=1 pr=0 pw=0 time=28 us)(object id 57978)
.....
       从测试结果分析来看,当绑定变量的名称不一样时,即使在cursor_sharing为force的情况一下,执行计划也是无法共享的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12350275/viewspace-690250/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12350275/viewspace-690250/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值