`
zybing
  • 浏览: 448262 次
  • 性别: 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

 

分享到:
评论

相关推荐

    SQLServer2008查询性能优化 2/2

    3.7.5 实际执行计划vs.估算执行计划 88 3.7.6 计划缓存 89 3.8 查询开销 90 3.8.1 客户统计 90 3.8.2 执行时间 91 3.8.3 STATISTICS IO 92 3.9 小结 94 第4章 索引分析 95 4.1 什么是索引 95 4.1.1 索引的...

    SQLServer2008查询性能优化 1/2

    3.7.5 实际执行计划vs.估算执行计划 88 3.7.6 计划缓存 89 3.8 查询开销 90 3.8.1 客户统计 90 3.8.2 执行时间 91 3.8.3 STATISTICS IO 92 3.9 小结 94 第4章 索引分析 95 4.1 什么是索引 95 4.1.1 索引的...

    Windows内核安全与驱动开发光盘源码

    9.4.2 局部变量的声明 146 9.4.3 磁盘设备的创建 147 9.4.4 如何处理发往设备的请求 148 9.4.5 用户配置的初始化 149 9.4.6 链接给应用程序 151 9.4.7 小结 152 9.5 FAT12/16磁盘卷初始化 152 9.5.1 磁盘卷...

    Windows内核安全驱动开发(随书光盘)

    9.4.2 局部变量的声明 146 9.4.3 磁盘设备的创建 147 9.4.4 如何处理发往设备的请求 148 9.4.5 用户配置的初始化 149 9.4.6 链接给应用程序 151 9.4.7 小结 152 9.5 FAT12/16磁盘卷初始化 152 9.5.1 磁盘卷...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺 第1章 导论 1 1.1 RoR的革命与Web开发的新时代 1 1.2 RoR并不完美 2 1.2.1 Ruby语言方面的不足 2 1.2.2 对历史遗留项目的...

    DygraphsPencil:dygraphs的铅笔输入

    这还将曲线的值绑定到闪亮应用程序的 input$ 变量。 可以在下找到构建它的 dygraphs javascript 示例 安装 该dyPencilgraphs包依赖于dygraphs包和开发版打包,所以你需要安装软件包。 您可以使用devtools包执行此...

    C#实训教程

    2.2 变量 18 2.3 常量 22 2.4 预定义数据类型 22 2.5 流控制 28 2.6 数组 37 2.7 命名空间 38 2.8 C#预处理器指令 44 2.9 C#编程规则 46 2.10 内容总结 50 2.11 独立实践 50 3 对象和结构 52 3.1 类和结构 52 3.2 类...

    Grails权威指南

     8.2.1 使用标签来设置变量  8.2.2 逻辑标签  8.2.3 迭代标签  8.2.4 过滤器和迭代  8.3 grails动态标签  8.3.1 链接标签  8.3.2 创建表单和字段  8.3.3 验证和错误处理  8.4 ...

    C#微软培训资料

    第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...

    maven window下安装包

    第5章:坐标和依赖/5.9 最佳实践/5.9.2 依赖属性使用变量 第5章:坐标和依赖/5.9 最佳实践/5.9.3 依赖关系查看 第6章:仓库/6.1 何为Maven仓库 第6章:仓库/6.2 仓库的布局 第6章:仓库/6.3 仓库的分类 第6章:仓库/...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    20.8 指导原则和最佳实践 20.8.1 善用finally块 20.8.2 不要什么都捕捉 20.8.3 得体地从异常中恢复 20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理...

    CLR.via.C#.(中文第3版)(自制详细书签)

    20.8 指导原则和最佳实践 20.8.1 善用finally块 20.8.2 不要什么都捕捉 20.8.3 得体地从异常中恢复 20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理的...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    20.8 指导原则和最佳实践 20.8.1 善用finally块 20.8.2 不要什么都捕捉 20.8.3 得体地从异常中恢复 20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    20.8 指导原则和最佳实践 20.8.1 善用finally块 20.8.2 不要什么都捕捉 20.8.3 得体地从异常中恢复 20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理...

    程序员专用刷题-silabus:计算机图形学大纲(IF184502)A级,ITS信息学,2018年

    程序员专用刷题 布局 永久链接 默认 / Silabus Grafika Komputer (kelas A) 如果您是教师或对课程设计感兴趣,...这些不会由讲师强制执行,但是如果您不了解这些概念,您就会迷失方向。 如果您需要复习,请查看 . 课程

    程序员专用刷题-syllabus:纽约大学高级JavaScript课程的教学大纲

    主题包括数据封装、闭包、绑定、继承和名称间距。 发现该语言的一些鲜为人知但有用的功能,例如如何在不同浏览器上调试 JavaScript 问题并提高性能。 使用第三方 JavaScript 库创建交互式网页。 实验室提供计算机,...

Global site tag (gtag.js) - Google Analytics