`
zybing
  • 浏览: 455925 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【实践】对于绑定变量看执行计划

阅读更多

 

基础:

 

 

从Oracle9i,开始的Bind Peeking

(http://www.oraclefans.cn/forum/showtopic.jsp?rootid=5467&CPages=1)

但是使用绑定变量有一个不好的地方,就是对于访问具有倾斜的列,可能使用错误的执行计划。

 

当SQL第一次执行的时候,优化器会根据绑定变量来确定执行计划(如果存在柱状图)。BIND PEEKING只有当该SQL第一次执行的时候,进行HARD PARSE的时候才进行,第二次调用该SQL,就不会再次进行BIND PEEKING。这种情况下,就存在另外一个风险,如果某个列的倾斜性很厉害,那么使用BIND PEEKING就是不安全的,因为不同的参数代入,只能走第一次执行时的执行计划,那么执行计划就像掷色子一样,要靠运气了。碰到这种情况,应用就不应该使用绑定变量,而应该改为直接值了。

 

BIND PEEKING对于使用绑定变量的情况下,选择较优的执行计划有一定的作用

BIND PEEKING只有在存在柱状图的情况下才能工作

BIND PEEKING只在做HARD PARSE的时候才产生,随后的执行如果不需要HARD PARSE就不会进行BIND PEEKING,这种情况和CURSOR_SHARING无关

由于以上原因,使用绑定变量的时候可以有效的减少PARSE

对于使用不同绑定变量执行计划应该不同的情况,建议不要使用绑定变量,否则可能会产生随机的执行计划(硬分析后的所有执行都使用第一个执行计划,执行计划和第一次执行的参数有关)

 

 

Oracle11g提供新的特性自适应游标共享(Adaptive Cursor Sharing),对于一个同样绑定变量的SQL可以有多个执行计划,从而达到动态优化执行计划的作用(http://dev.firnow.com/course/7_databases/oracle/oraclexl/2008324/107073.html)。

 

 

=================================================================

 

现在最简单的方法: 可以直接查询V$SQL_PLAN表;

 

要强调的一点,sqlplus中打开autotrace看到的执行计划实际上是用explain plan 命令得到的,explain plan 命令不会进行bind peeking。应该通过v$sql_plan查看SQL的真实的执行计划。

http://blog.csdn.net/tianlesoftware/archive/2010/04/29/5544307.aspx

 

分享到:
评论

相关推荐

    Oracle数据库的绑定变量特性及应用.pdf

    绑定变量的使用能够显著改善SQL语句的执行效率,尤其是在处理大量重复查询时。本文将深入探讨绑定变量的原理、优势以及如何在实践中应用。 首先,为什么我们要使用绑定变量?在Oracle数据库中,每次执行带有硬编码...

    Oracle数据库绑定变量特性及应用

    在这个例子中,我们可以看到,使用绑定变量的查询执行时间显著低于不使用绑定变量的情况,证明了绑定变量对于提高性能的重要性。 然而,值得注意的是,虽然绑定变量通常带来性能提升,但在某些特定情况下,如绑定...

    在PHP中利用绑定变量提高Oracle的存储效率.pdf

    2. **避免过度优化**:并非所有情况都需要使用绑定变量,对于只执行一次的SQL,解析成本可能并不高。 3. **监控和调整**:定期检查数据库的性能指标,如解析统计信息,根据实际情况调整绑定变量的使用策略。 4. **...

    java代码绑定时间

    在Java编程中,特别是在处理与数据库交互的应用场景下,正确地使用数据库绑定变量对于提升系统性能、减少资源消耗具有至关重要的作用。本文将围绕“Java代码绑定时间”这一主题,深度剖析在Java程序中使用Oracle绑定...

    luoluo优化专题-执行计划

    通过这些工具,你可以看到行源输出、图形化视图,甚至可以开启额外的选项来揭示绑定变量、访问路径等详细信息。 此外,本专题可能涵盖了如何使用索引来提升查询性能。索引是加速数据检索的重要手段,但并非所有查询...

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    当SQL语句中的参数用绑定变量替代时,数据库只需解析一次,后续相同结构的查询将共享同一个执行计划。 4. **分区技术**:在大型数据库中,分区是一种有效的管理策略。通过将大表划分为更小、更易管理的部分,可以...

    从执行计划和索引结构优化查询语句

    6. **查询重写和绑定变量**:使用绑定变量防止硬解析,确保相同的SQL语句执行时能复用已编译的执行计划。此外,查询重写也可能帮助数据库自动选择更优的执行路径。 最后,需要注意的是,优化不仅仅是添加更多的索引...

    Python新手如何进行闭包时绑定变量操作

    然而,对于初学者来说,理解闭包如何绑定变量可能会有些棘手,特别是当涉及到可变对象和晚期绑定(late binding)时。 在给定的例子中,我们看到一个常见的误解,即期望闭包能够捕获变量的值,而不是变量的引用。来...

    控件与变量的关联 例子

    控件与变量的关联,简单来说,就是将控件的值与变量绑定,使得控件的变化能够实时更新变量的值,反之亦然。这样,当用户在界面上进行操作时,如改变文本框的输入或点击按钮,对应的变量会自动更新,从而影响程序的...

    Oracle AAOUG-46

    - **性能下降**:对于单个用户,不使用绑定变量可能导致每次执行都需要进行解析,增加系统负载。 - **多用户可扩展性受限**:在高并发环境下,每个用户请求都可能导致新的解析,系统无法有效地处理大量并发请求。 ...

    c++第二章变量_c++变量课件_

    静态变量在程序执行期间只初始化一次,其值在函数调用之间保持。而动态变量(通常通过new运算符分配)在堆上创建,需要手动释放以防止内存泄漏。 7. const常量: 常量是不可改变的变量,一旦赋值后不能再次修改。...

    flex企业应用开发笔记-数据绑定

    5. **延迟绑定和即时绑定**:延迟绑定(lazy binding)会在需要时才执行,而即时绑定(eager binding)在应用启动时就计算绑定表达式。 6. **自定义数据绑定**:Flex允许开发者创建自定义数据绑定函数,以满足特定...

    flex数据绑定

    例如,在示例代码中,开发者尝试将`xml.user.name`绑定到一个`Label`控件上,但是在预初始化阶段将`xml`变量设置为`null`。这会导致`xml`对象无法访问其`name`属性,进而使得`Label`控件的内容为空。 - **原因分析*...

    《Oracle9i&10g编程艺术》学习心得

    而对于数据仓库系统来说,单个SQL语句的执行时间较长,此时绑定变量带来的性能提升可能不太明显。 #### 三、读一致性与非阻塞读 Oracle数据库通过多种机制保证读一致性的同时,还能实现非阻塞读。 **1. 读一致性...

    oracle sql_tuning

    8. **绑定变量peeking**:Oracle在某些情况下会预览绑定变量值,这可能导致执行计划选择不当。了解何时以及如何避免这种情况是调优的关键。 9. **共享池与库缓存**:共享池是内存结构的一部分,存储解析后的SQL语句...

    DataBinding Demo 事件绑定

    在Android开发中,...在项目`DataBindingTest`中,你可以找到相关的示例代码,通过实践加深对DataBinding事件绑定的理解。通过研究和应用这些概念,你将能够更好地利用DataBinding来优化你的Android应用程序。

    Oracle SQL最佳实践

    - **绑定变量的使用:** 当应用程序需要频繁执行相同的 SQL 但每次传入的参数不同时,推荐使用绑定变量。例如,查询客户信息时,使用绑定变量 `:x` 替代具体的数值。 - **示例:** ```sql SELECT * FROM ...

Global site tag (gtag.js) - Google Analytics