eygle.com   eygle.com
eygle.com  
 

« Oracle ACE更新 发布中国ACE信息 | Blog首页 | 2007我的新书写作计划及进度 »

Oracle Peeking绑定变量的控制

作者:eygle |【转载时请务必以超链接形式标明文章和作者信息及本声明
链接:

我们知道从Oracle9i开始,Oracle引入了Peeking of User-Defined Bind Variables的特性,这个特性可以用来在存在数据倾斜时对执行计划纠偏。
然而这一特性也可能带来一些副作用,所以Oracle同时引入了一个内部参数用于控制这一特性:

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 WHERE x.inst_id = USERENV ('Instance')
4 AND y.inst_id = USERENV ('Instance')
5 AND x.indx = y.indx
6 AND x.ksppinm LIKE '%&par%'
7 /
Enter value for par: peek
old 6: AND x.ksppinm LIKE '%&par%'
new 6: AND x.ksppinm LIKE '%peek%'

NAME VALUE DESCRIB
------------------------------ -------------------- ------------------------------
_optim_peek_user_binds TRUE enable peeking of user binds

这个参数缺省值为True,当设置为False时将禁用peeking of user binds.

-The End-

By eygle on 2007-03-07 15:13 | Comments (7) | Posted to Internal | Edit |Pageviews:

相关文章 随机文章
  • 关于Oracle9i的Peeking of User-Defined Bind Variables
  • 如何对时间进行简单加减运算
  • 并行查询并行度Degree与instances 设置
  • 关于PARALLEL_MAX_SERVERS参数的设置
  • 使用REF CURSOR处理Oracle的结果集
  • 应对低端市场 Oracle推出免费数据库产品
    在Linux下安装VNC 远程安装Oracle
    Oracle Diagnostics:How to deal with ORA-19815
    推荐下载“2005 OTN 精选”CD
    情人节的玫瑰
    网上相关主题:
    Google

    留言 (7)

    个人意见, 在OLAP系统中还是设成False为好. Peeking对了固然好, 但如果Peeking错了, 则麻烦大了.

    Posted by: anysql at March 7, 2007 10:00 PM

    记得你那篇测试中表明,只有SQL第一次执行时,才会peeking,或者说只要不再需要hard parse,就不再会peeking?

    那么这样的peeking作用实在很小,因为如果一个表数据分布确实很不均匀,那么即使柱状图正确,多次SQL的请求结果也会是不相同的,一次peeking选择了正确的执行计划,必然导致后面总会有不如意的执行计划。

    Posted by: kamus at March 19, 2007 7:40 PM

    大师,如果这个隐含参数设置为false 那么对于绑定变量的SQL 语句来说运行的时候是根据什么来形成执行计划的?

    对于数据仓库来说,既然peek 的危害很大,可以不使用绑定变量的

    Posted by: rchsh at April 3, 2007 3:01 PM

    如果设为False,就是少了一个Peeking,因为Peeking对数据分步不均衡的表可能会导致错误的执行计划选择。

    如无必要,还是建议不要修改隐含参数。

    Posted by: eygle at April 3, 2007 9:16 PM

    谢谢大师,我 想问问如果这个参数设置为false 就不peeking了,那么这个 时候oracle的优化器会根据什么来形成执行计划呢 ?

    我依照你例子测试了 一下,把这个参数修改成false之后,发现无论id=1还是99,那个查询都走了全表扫描,id有索引,应该index才对 啊

    Posted by: rchsh at April 4, 2007 4:14 PM

    Select * from table1 where id = @id
    该语句转换成Oracle时变量@id出现表达式错误,请教高手指点该如何转换,谢谢!

    Posted by: Vale_Jones at November 5, 2007 8:20 PM

    要看你的SQL是写作哪里的,sqlplus中,&id可以带入变量。

    Posted by: eygle at November 6, 2007 9:27 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004 eygle.com, All rights reserved.