<让oracle跑得更快-6> 绑定变量

[b]变量绑定[/b]是[color=red]OLTP[/color]系统中一个非常值得关注的技术点。良好的变量绑定会使OLTP系统数据库中的sql执行速度飞快,内存效率极高;不绑定变量可能会使OLTP数据库不堪重负,资源被sql解析严重消耗,系统显得滞重而缓慢。

[b]6.1 什么是变量绑定,为什么要做变量绑定[/b]
在介绍绑定变量以前,首先要介绍一下sql究竟是如何被执行的,知道了sql执行的具体细节之后,才能讨论为什么以及什么时候要做变量绑定。
当一个用户与数据库建立起了连接后,会向数据库发出操作请求,也就是向数据库发送一条(或是几条或一个pl/sql包)sql语句。Oracle在接到这条sql之后,首先会将这个sql做一个hash函数运算,得到一个hash值,然后到共享池中寻找是否有和这个hash值匹配的sql存在。如果找到了,oracle将直接使用已经存在的sql的执行计划去执行当前的sql,然后将结果返回给用户;如果在共享池中没有找到相同hash值的sql,oracle会认为这是一条新的sql,将会按照下面的顺序来执行:
[b]A. 语法分析[/b]
主要看这条sql是否符合oracle规定的语法规则,如果发现语法有误,将向用户抛出一个错误信息。

[b]B. 语义分析[/b]
当语法分析通过以后,oracle将对这条sql做一些对象、权限方面的检查,查看sql中操作的表是否存在,表中的列是否正确,用户是否有操作这个对象的权限等。[b]这个阶段会自动把oracle中的小写转为大写(引号内的内容除外)(待确认)。[/b]

[b]C. 生成执行计划[/b]
这个过程oracle将通过一些列的操作,来做出最后sql的执行计划,比如查看操作对象的统计信息,动态采样等。

[b]D. Sql的执行[/b]
Oracle按照上一步生成的执行计划,实际地执行sql语句,并将结果返回给用户。至此,一条sql语句执行完毕。

[color=blue]语法分析、语义分析、生成执行计划这些工作十分消耗资源,所以通常称为硬分析(hard parse),而直接通过相同hash值从共享池中获取执行计划则称为软分析(soft parse)。[/color]

[color=blue]绑定变量是什么,为什么要绑定变量?[/color]
绑定变量就其本质来说就是把本来需要oracle做硬分析的sql变成了软分析,以减少oracle花费在sql解析上的时间和资源。

[b]6.2 为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量[/b]
OLTP系统中,sql语句大多是比较简单或操作的结果集都很小。如果在这些表上创建了索引,那么这种极小结果集的操作使用索引最适合,并且几乎所有sql的执行计划中的索引都会毫无悬念地被选择。在这种执行计划几乎是唯一的情况下,oracle使用变量来代替谓词常量,使用同一个执行计划时合适的。
而[color=red]OLAP[/color]系统再sql的操作中就复杂得多,OLAP数据库上大多数时候运行的是一些报表sql,这些sql经常会用到聚合查询(比如group by),而且结果集也非常庞大,在这种情况下,索引并不是必然的选择,甚至有的时候全表扫描的性能会优于索引,即使相同的sql,如果谓词条件不同,执行计划都可能不同。

我们大致可以得出下面的结论:
[color=red](1) OLAP系统完全没有必要绑定变量,那样只会带来负面的影响,[/color]比如导致sql选择了错误的执行计划,这个代价有时候是灾难性的;让oracle对每条sql做硬分析,确切地知道谓词条件的值,这对执行计划的选择至关重要,这样做的原因是,在OLAP系统中,sql硬分析的代价是可以忽略的,系统的资源基本上是用于做大的查询,和查询比较起来,sql解析消耗的资源显得微不足道。所以得到一个最优的执行计划变得尤为重要。
[color=red](2) 在OLAP系统上,让oracle确切地知道谓词的数值至关重要。[/color]它直接决定了sql执行计划的选择,这样做的方式就是不要绑定变量。
(3) [color=red]在OLAP系统中,表、索引的分析至关重要,[/color]因为它是oracle为sql做出正确的执行计划的信息来源和依据,所以需要建立一套能够满足系统要求的对对象分析的定时执行任务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值