在Oracle中,对于一个提交的sql语句,存在两种可选的解析过程,硬解析和软解析。一个硬解析需要经解析,制定执行路径,优化访问计划等步骤。硬解析不仅仅会耗费大量的cpu,更重要的是会占据重要的闩(latch)资源。唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是使用变量来代替sql语句中的常量。绑定变量能够使得每次提交的sql语句都完全一样。1. sqlplus
转载
2024-02-04 12:23:09
111阅读
sqlplusSQL> set numw 30select FORCE_MATCHING_SIGNATURE, count(1) from v$sql where FORCE_MATCHING_SIGNATURE > 0 and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE gr
原创
2017-09-21 11:50:59
755阅读
oracle变量绑定
近期查看公司业务系统的DB层代码,发现SQL语句多采用常量形式,难怪公司总抱怨系统效率低。我知道采用绑定变量可以很大程度上提高效率,但却解释不清,到网上百度了一下,找到这篇文章,写的还不错,就摘录下来。以备以后参考。
********************************
转载
精选
2011-11-23 18:09:12
1256阅读
oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一以及修
原创
2022-09-01 22:19:20
216阅读
oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析。一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤。硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区
原创
2013-08-20 10:29:28
3339阅读
不太喜欢看到在procedure用||拼接sql的语句所以贴了个绑定变量的例子,仅供参考 create or replace procedure using_t
转载
2023-04-20 15:49:38
139阅读
最近在看《基于Oracle的SQL优化一书》
原创
2022-07-04 12:13:54
185阅读
两个步骤,一个步骤一个脚本一、查询出未只用绑定变量的SQL语句的哈希值,以及变体个数select to_char(FORCE_MATCHING_SIGNATURE) as FORCE_MATCHING_SIGNATURE,count(1) "COUNTS"from v$sqlwhere FORCE_MATCHING_SIGNATURE>0 and FORCE_MATCHING_SIGNATU
原创
2021-04-09 09:57:41
434阅读
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!Parent-Child cursor (父子游标) 父游标:只要SQL语句文本相同,它们就对应同一个parent cursor。 子游标:在某些情况下,虽然SQL语句的文本相同,但是因为其它因素不同(这些因素可以在视图V$SQL_SHARED_CURSOR中查看),致使产生不同的child cursor。(重新生成child cursor,也就意味着一次硬剖析) cursor_sharing 对于是不是应用绑定变量这个问题,最好是交给应用程序决议,在数据库层面是很难正确...
转载
2013-05-31 21:24:00
190阅读
2评论
这个方案要点在于以下三点:1, 每次拼接条件时,都把条件对应的变量值塞入嵌套表中。因为是一一对应的,因此在取变量值时,很容易就匹配上。2, 因为绑定变量执行时,using一定要把所有的绑定变量值都列出来。因此最后,最后会有一个case语句,根据变量个数来确定执行那个分支。3, 嵌套表的类型是字符类型的。因此要获取日期类型和数字类型值时,记得加上to_date
转载
2023-12-06 16:03:48
80阅读
众所周知,绑定变量窥探是oracle 10g版本的一个比较厉害的新角色,它的出现加强了oracle在SQL语句性能上的提升,尤其对于批量sql语句和硬解析的环境有一定作用,但是同样也带来了一些麻烦。今...
原创
2021-04-16 22:19:05
320阅读
绑定变量分级是指Oracle在plsql代码中会根据文本型绑定变量的定义长度而将这些文本型绑定变量分为4个等级。a、定义长度在32字节以内的文本型绑定变量被分在第一个等级b、长度在33-128字节之间为第二个等级c、长度在129-2000字节之间为第三个等级d、长度在2000字节以上的被分为第四个等级其中第四个等级文本型绑定变量分配的内存空间,取决于对应文本行绑定变量所传入的实际绑定变量值的大小。
原创
2021-04-15 11:26:28
143阅读
现在把隐含参数_optim_peek_user_binds设置为false关闭绑定变量窥探:SQL> alter session set "_optim_peek_user_binds" = false; 会话已更改。然后保持x不变,y修改为1000,再次执行目标SQL:看到目标SQL对应列的version_count和executions值由之前的1变为了2,说明Oracle在执行该SQL
原创
2021-04-16 18:52:56
378阅读
绑定变量的使用过程当中,oracle建议绑定变量的个数不宜太多。目标SQL的SQL文本中的绑定变量个数不宜太多,否则可能会导致目标SQL总的执行时间大幅度的增长。增长的时间主要消耗在执行目标SQL时对每一个绑定变量都用其实际的值来替换(这个过程就是所谓的绑定变量值替换),目标SQL的SQL文本中的绑定变量的个数越多,这个替换过程所消耗的时间就越长,该SQL总的执行时间也就越长。如下
转载
2021-04-09 22:22:54
458阅读
那么对于绑定来说,如何得到已执行的目标SQL中的绑定变量的值呢? 当面对的是已经执行过且使用了绑定变量的目标SQL时,我们就必须想案发得到这些目标SQL中绑定变量的实际输入值。因为只有知道了绑定变量的实际输入值,我们才有可能在原数据库环境中重现目标SQL原先的执行计划,才能确认我们对其执行计划做的调整是有针对性的,是真实有效的。 如何得到已执行目标SQL中的绑定变量的
原创
2021-04-16 18:45:06
253阅读
Oracle绑定变量详解一.绑定变量绑定变量:为了成功地执行语句,一个变量必须在一个SQL语句中替换为一个有效的值或者一个值的地址,。变量绑定是OLTP系统中一个非常值得关注的技术。良好的变量绑定会使OLTP系统数据库中的SQL执行速度飞快,内存效率极高;不使用绑定变量可能会使OLTP数据库不堪重负,资源被SQL解析严重耗尽,系统运行缓慢。当一个用户与数据库建立连接后,会向数据库发出操作请求,即向
转载
精选
2013-10-08 15:31:10
610阅读
随着具体输入值的不同,SQL的where条件的可选择率(Selectivity)和结果集的行数(Cardinality)可能会随之发生变化,而Selectivity和Cardinality的值会直接影响CBO对于相关执行步骤成本值的估算,进而影响CBO对SQL执行计划的选择。这就意味着随着具体输入值的不同,目标SQL执行计划可能会发生变化。对于不使用绑定变量的SQL而言,具体输入值一量发生了变化,
原创
精选
2017-03-07 16:30:27
2094阅读
绑定变量在OLTP环境下,被广泛的使用;这源于OLTP的特点和sql语句的执行过程,OLTP典型的事务短,类似的sql语句执行率高,并发大;oracle在执行sql语句前会对sql语句进行hash运算,将得到的hash值和share pool中的library cache中对比,如果未命中,则这条sql语句需要执行硬解析,如果命中,则只需要进行软解析;硬解析的执行过程是先进行语义,语法分析,然后生
推荐
原创
2012-06-15 12:00:24
4867阅读
点赞
1评论
Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值
,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。一、绑定变量窥探 使用SQL首次运行时的值来生成执行计划。后续再次运行该SQL语句则使用首次执行计划来执行。
原创
2022-01-05 15:17:50
304阅读
<br /> <br />之前整理过一篇有关绑定变量的文章,不太详细,重新补充一下。<
原创
2022-09-01 22:22:59
514阅读