参数cursor_sharing的解释

这个参数的设置,oracle是为了满足一些以前开发的程序,里面有大量的similar statement,但是重写有不现实的情况下使用的一个参数。
并且oracle也不建议使用这个参数。

什么时候需要修改这个参数呢?需要满足以下的条件。
一个是由于大量的shared pool hit miss影响了用户的响应时间(就是当前的shared pool无法满足共享sql语句存储的需要,Alan:当前libary cache中没有我们所需要重用的explain和sql),如果没有这个问题,那么设置这个参数,可能会造成更糟糕的性能。这个参数只会减少parse的时间。
另外一个就是在现有程序中有大量的similar statement,可以通过设置这个参数来获得比较好的性能。
cursor_sharing这个参数有三个值可选,exact、similar、force。当值为exact时为默认值,也是oracle的默认处理方式。就是当一个statement parse的时候,首先到shared pool区查看是否有exact statement存在(就是看是否在shared pool中有和当前要解析的statement完全一样的语句存在),如果不存在,就执行hard parse
如果该参数设置为similar,那么如果在shared pool中无法找到exact statement的存在的时候,就会在shared pool进行一次新的查找,就是查找和当前要解析的语句是否是similar statement的语句。这里需要对similar statement进行解释,similar statement就是除了value of some literal不同的语句,别的地方都相同的语句。比如下面:

select * from a where a=1;
select * from a where a=2;

当cursor_sharing设置为similar时,如果在shared pool中查找到这样的语句,就会做下一步的检查,看shared pool中缓存的这个语句的execution plan是否适合当前解析的语句,如果适合,就会使用shared pool的语句,而不去做hard parse。如果cursor_sharing设置为force的时候,当在shared pool中发现了similar statement之后,就不会再去检查执行计划了,而直接使用在shared pool的这个语句了。
将cursor_sharing设置为force实际上是危险的。这会可能形成sub optimal的执行计划。比如对于一个范围查找的语句,比如
select * from a where a>10 and a这样看起来是减少了parse恶的时间,但是大大增大了execution的时间。

对于新开发的application,最好是不要设置这个参数,而是针对可以共享的语句使用绑定变量,而对于不适合共享的语句,就不使用绑定变量。将cursor_sharing保持默认值,也就是exact。

调整cursor_sharing的关键一定是要看调整cursor_sharing的条件是否存在。
就是是否有比较大的shared pool hit miss,如果这个条件没有,那就没有必要调整这个参数。cursor_sharing的目的是减少parse time,但是在整个db time中,可能parse time只占很小的一部分。
 参考资料:

http://edu.codepub.com/2010/0111/19608.php

http://ms.itpub.net/redirect.php?fid=2&tid=1121730&goto=nextnewset

时间: 2024-09-24 03:00:03

参数cursor_sharing的解释的相关文章

armeabi-v7a armeabi arm64-v8a 参数的含义解释

严格意义上这个不是原创是从网上找的资源,理解后写成的,所有资料都注明了来源 armeabi是针对所有的arm cpu,只要支持arm的指令集就可以,v7a,v8a是针对arm后来出的指令集版本制定的cpu如符合arm7指令集的cpu armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu. armeabi-v7a(32位ARM设备), arm64-v8a(64位ARM设备) EABI 百度百科: 应用程序二进制接口(application binary interface,A

了解路由器中的管理间距和量度参数

谈到路由协议和路由器时,管理间距(administrative distance)和量度(Metrics)是两组重要的参数.这两组参数真正的意思是什么呢?David Davis将向你介绍这两组参数,并解释了使用Cisco路由器需要了解管理参数重要性的原因. 当提到路由协议和路由器使用哪条通道时,管理间距和量度是两组重要参数.充分熟悉这两组参数对了解网络性能.可靠性以及回路选择等各个部分具有非常重要的作用. 如果你对管理间距和量度不太熟悉,你即便是看到了这些参数,也不会重视它们.如果你输入一条sh

Rsync命令参数详解

rsync参数的具体解释如下: -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filenam

参数文件视图(v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparameter)

    用过Oracle的朋友都知道,现在绝大部分Oracle数据库使用的是基于服务器的参数文件.对于查询当前数据库实例级别,system级别,session级别参数的具体设置有些时候很容易混淆.本文主要介绍了Oracle数据库参数使用的相关视图(V$PARAMETER,V$PARAMETER2,V$SYSTEM_PARAMETER,V$SYSTEM_PARAMETER2,V$SPPARAMETER),以及通过查询Oracle视图来获得不同情形下的参数值并进行对比.   1.对比有关参数视图a.

wordpress中wp_nav_menu()参数详解

昨天折腾主题的时候, 创建了一个函数文件 创建了一下header菜单 但是保存后刷新后台却没有任何反应 于是苦逼的我[TUT]去百度谷歌必应搜搜了好久 →起码折腾了两个小时 最后我苍白的发现 [我去,我创的函数文件是function.php不是functions.php!!!] Q无语泪奔Q wp_nav_menu()参数的详细解释如下%>_<%: <?php   $menu_args = array(   //最外层容器的标签名,默认div   '' => 'div',   //

PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别_php技巧

虽然nosql变得流行,但是我感觉sql还是主流 今天在翻php manul的时候,发现mysqli 的查询可以传递一个有意思的参数 复制代码 代码如下: @mysqli_query($this->sql,$SQL,($method ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT)); 在php manul上面对这两个参数是这样解释的. 复制代码 代码如下: Either the constant MYSQLI_USE_RESULT or MYSQLI_STO

Rsync命令参数详解_服务器其它

在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来.rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明.Rsync的命令格式可以为以下六种: rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]HOST:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [U

Mongodb启动命令参数中文说明_MongoDB

我们可以通过mongod --help查看mongod的所有参数说明,以下是各参数的中文解释. 基本配置 复制代码 代码如下: –quiet # 安静输出 –port arg # 指定服务端口号,默认端口27017 –bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP –logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录 –logappend # 使用追加的方式写日志 –pidfilepath arg # PID

[20150513]函数索引与CURSOR_SHARING=FORCE

[20150513]函数索引与CURSOR_SHARING=FORCE.txt --经常awr报表,大量听到的建议是你们的应用没有使用绑定变量.国内的许多项目这个问题更加严重,我敢打赌国内80%甚至更高的比例在 --应用中没有绑定变量(OLTP系统). --如果一个新项目我只要看一下程序使用绑定变量的情况,就知道这个项目是垃圾还是豆腐渣工程.到目前为止我接触的项目仅仅有1个做 --的稍微好一点. --如果不修改代码,一个最简单的方式就是修改参数CURSOR_SHARING = FORCE(补充一