梆定变量的长度不一致也可能会造成硬解析

当第一次使用梆定变量为字符串类型,并且小于32bytes时,oracle捕获这个梆定变量,并改写该梆定变量的字符串长度为32Bytes。如果第二次再使用该sql和梆定变量,如果梆定变量长度超过32字节小于128字节,则oracle会自动将该梆定变量长度改为128字节,并且重新生成一个子游标和执行计划,造成相同梆定变量的sql的执行计划不能共享,需要重新生成解析树和执行计划(即是硬解析),过多的硬解析是万恶之源,会占用大量的CPU、IO和内存资源,造成系统性能瓶颈。所以使用相同SQL的相同梆定变量时,要特别注意每次该梆定变量的长度是否在符合软解析的区间长度内。

 

测试结果如下:

1)、创建一个10个字节可变长度的字符串变量 v:

23:24:15SYS@orcl*SQL> var v varchar2(10);

23:24:26SYS@orcl*SQL> exec :v :='abcd';

23:24:26SYS@orcl*SQL> print v;

V

----------

abcd

 

 

2)、将变量 v 梆定到 sql 的查询谓词条件值中,并执行:

23:24:27SYS@orcl*SQL> select * from tuser.testbind where test=:v;

 

TEST

----------

abcd

 

 

3)、查询上面执行的sql在 Library Cache (Sharedpool共享池中的库缓存&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值