故障排除: 版本数高(High Version Count)的问题 (Doc ID 2896923.1)
参考MOS
Troubleshooting: High Version Count Issues (Doc ID 296377.1)
故障排除: 版本数高(High Version Count)的问题 (Doc ID 2896923.1)
SQL 版本数过高 – 原因判断脚本 (Doc ID 1985045.1)
High SQL Version Counts - Script to determine reason(s) (Doc ID 438755.1)
适用于:
Oracle Database - Personal Edition - 版本 10.2.0.1 和更高版本 Oracle Database - Enterprise Edition - 版本 10.2.0.1 和更高版本 Oracle Database Cloud Schema Service - 版本 N/A 和更高版本 Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本 Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本 本文档所含信息适用于所有平台
用途
本故障排除指南提供帮助如何调试SQL共享问题。在可能的情况下,本文档中包括了诊断工具,以协助排除问题。本文件不包含bug/补丁相关内容,关于这些主题可以参考文档底部引用的相关文档。
排错步骤
什么是 '高' 版本数?
对于特定的游标,关于所谓的"高"版本数,并没有明确的定义,不同的系统可能会有不同版本范围。不过,AWR报告开始报告一个特定游标的版本超过20,这是一个很好的存在潜在问题的指标。
一旦你发现版本数达到了数百或者数千个的时候,那么很明显版本数高了,应该调查原因,建议用户通过共享SQL来降低版本数。重要的是要理解,有时高版本数是预期的,而不是由于任何问题(缺陷)产生的的结果。
什么是共享 SQL ?
首先要记住的是,所有的SQL都是隐性可共享的。当输入一个SQL语句时,RDBMS将为该SQL语句创建一个哈希值,然后RDBMS通过该哈希值可以轻松地找到已经在共享池中存在的SQL。
例如 :- 'select count(*) from emp' 的哈希值为4085390015。
现在我们为这个sql创建一个父游标和一个子游标。一个SQL语句可能永远不会被共享,这并没有问题--当它第一次被解析时,会创建一个父游标和一个子游标。简单地说,父游标代表该SQL的哈希值,子游标代表该SQL的元数据。
什么是SQL元数据 'SQL Metadata'?
元数据是使语句能够运行的所有信息。例如,用户有一张表EMP,这样会有一个OBJECT_ID,通过这个OBJECT_ID可以定位到从属于用户的这个EMP表。当用户登录时,在这个会话中初始化供语句使用的优化器参数,优化器也会用到这些初始化参数,因此也属于元数据。还有其他一些元数据的例子,将在本文档中进一步提及。
这个会话退出,然后又登录回来。再次执行相同的命令(作为同一个用户)。这次在共享池中已经存在这个SQL(但是我们并不知道这些)。我们对语句执行哈希运算,通过哈希值在共享池中寻找。如果我们能够找到,然后我们通过查找子游标来判断我们是否可以重用它们(比如元数据一致)。如果是这样,那么我们就可以共享该SQL语句。因为元数据让我们能够共享已经存在子游标,所以这时共享池中仍然只有这个SQL的一个版本。基本原则是,父游标不会被共享,根据子游标来判断是否可以被共享。
接下来,另一个用户,这个用户同样有一张名为EMP的表,如果用过户执行之前的SQL语句将会发生什么:
- 对这个SQL语句执行哈希算法,得到的哈希值为4085390015。
- 通过这个在共享池中将会找到这个这个SQL语句。
- 遍历子游标(这是只有一个子游标)
- 由于用户 的EMP表的OBJECT_ID与用户的EMP表的OBJECT_ID不同,所以这里会遇到"不一致"。
(基本上,这里发生的事情是,我们有一个链接的子列表,我们依次移动,比较当前SQL的元数据和所有子列表的元数据。 如果有100个子游标,那么我们会逐一扫描(寻找可能的不匹配并继续前进),直到找到一个我们可以共享的子游标。 如果不能共享任何(即已经用完了孩子的名单),那么需要创建一个新的子游标)
- 因此,需要创建一个新的子游标 - 这时就会有一个父游标和两个子游标。
为什么要关注 '高' 版本?
非必要的不共享SQL,以及由此产生的SQL版本,是造成库缓存争用的主要原因。争用会降低数据库的性能,在极端情况下,可能会导致数据库出现"挂起"的状况。当有不必要的游标版本时,每次执行该游标时,解析引擎都要在版本列表中搜索,查看哪个是想要的游标。这就浪费了可以用在其他方面的CPU资源。
如何看版本以及它们为什么没有共享?
使用下面文章中的脚本可以非常简单地获得格式清晰的版本信息:
Document 1985045.1 SQL 版本数过高 – 原因判断脚本
如果不能使用该脚本,那么可以通过访问基本视图获取到相同的信息,如下面的例子所说明的。
通过使用上面的例子,看看可以使用什么样的SQL来查看共享池中的信息。
执行 select count(*) from emp
现在可以运行以下SQL来查看PARENT语句和它的哈希值与地址
代码语言:javascript复制select sql_text, hash_value,address from v$sqlarea where sql_text like 'select count(*) from emp%';
SQL_TEXT HASH_VALUE ADDRESS
------------------------ ------------ ----------------
select count(*) from emp 4085390015 0000000386BC2E58
执行下面的SQL语句查看子游标(这时,期待有一个子游标):-
9.2.X.X 以及以前的版本 :
代码语言:javascript复制/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* select * from vsqlE95EsharedE95EcursorwherekglhdparE61E0000000386BC2E58<code><pre><li><li><p>10.0.XX:<p><pre><codeclass="sqllanguage−sql">selectE42Efromv<annotation encoding="application style="line-height: inherit;font-size: 0.9em;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;" span="" encoding=""application"><span class="katex-html" aria-hidden="true" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.946332em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">q<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">h<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">a<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">d<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">c<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">u<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">o<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="margin-right:0.02691em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">w<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">h<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="margin-right:0.03148em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">k<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">g<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">h<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">d<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">p<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">a<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="vlist" style="height:0.751892em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="top:-3.063em;margin-right:0.05em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="pstrut" style="height:2.7em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="sizing reset-size6 size3 mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">′0000000386<span class="mord mathit" style="margin-right:0.05017em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">B<span class="mord mathit" style="margin-right:0.07153em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">C<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="vlist" style="height:0.751892em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="top:-3.063em;margin-right:0.05em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="pstrut" style="height:2.7em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="sizing reset-size6 size3 mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mtight" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">′<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:1em;vertical-align:-0.25em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">c<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">o<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">d<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:1em;vertical-align:-0.25em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">p<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:1em;vertical-align:-0.25em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">i<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.73354em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">i<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.7335400000000001em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">p<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.68333em;vertical-align:0em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">10.0<span class="mord mathit" style="margin-right:0.07847em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">X<span class="mord mathit" style="margin-right:0.07847em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">X<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">以<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">及<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">以<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">后<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">的<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">版<span class="mord cjk_fallback" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">本<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:1em;vertical-align:-0.25em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">p<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.7335400000000001em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">p<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.69444em;vertical-align:0em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">c<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">o<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">d<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">c<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">a<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">"<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">q<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">a<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">n<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">g<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">u<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">a<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">g<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mspace" style="margin-right:0.2222222222222222em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">−<span class="mspace" style="margin-right:0.2222222222222222em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">q<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l"<span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mspace" style="margin-right:0.2777777777777778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;"><span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">s<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="margin-right:0.01968em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">l<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">e<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">c<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">t<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="margin-right:0.05764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">E<span class="mord mathit" style="margin-right:0.10764em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">f<span class="mord mathit" style="margin-right:0.02778em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">r<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">o<span class="mord mathit" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">m<span class="mord mathit" style="margin-right:0.03588em;" style="color: inherit;line-height: inherit;font-size: 0.9em;overflow-wrap: inherit !important;word-break: inherit !important;">vsql_shared_cursor where address = '0000000386BC2E58'
*/
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* </span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit" style="margin-right:0.10764em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit"></span class="mord mathit"></span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span class="mspace" style="margin-right:0.2222222222222222em;"></span class="mspace" style="margin-right:0.2222222222222222em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="strut" style="height:0.69444em;vertical-align:0em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="strut" style="height:0.7335400000000001em;vertical-align:-0.19444em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="strut" style="height:1em;vertical-align:-0.25em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord cjk_fallback"></span class="mord mathit" style="margin-right:0.07847em;"></span class="mord mathit" style="margin-right:0.07847em;"></span class="strut" style="height:0.68333em;vertical-align:0em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="strut" style="height:0.7335400000000001em;vertical-align:-0.19444em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="strut" style="height:0.73354em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="strut" style="height:1em;vertical-align:-0.25em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="strut" style="height:1em;vertical-align:-0.25em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="strut" style="height:1em;vertical-align:-0.25em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mspace" style="margin-right:0.2777777777777778em;"></span class="mord mtight"></span class="mord mtight"></span class="sizing reset-size6 size3 mtight"></span class="pstrut" style="height:2.7em;"></span style="top:-3.063em;margin-right:0.05em;"></span class="vlist" style="height:0.751892em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.07153em;"></span class="mord mathit" style="margin-right:0.05017em;"></span class="mord mtight"></span class="mord mtight"></span class="sizing reset-size6 size3 mtight"></span class="pstrut" style="height:2.7em;"></span style="top:-3.063em;margin-right:0.05em;"></span class="vlist" style="height:0.751892em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit" style="margin-right:0.03148em;"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02691em;"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.02778em;"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.05764em;"></span class="mord mathit" style="margin-right:0.01968em;"></span class="mord mathit" style="margin-right:0.03588em;"></span class="mord mathit"></span class="strut" style="height:0.946332em;vertical-align:-0.19444em;"></span class="katex-html" aria-hidden="true"></annotation encoding="application>
*/
输出结果:
代码语言:javascript复制ADDRESS KGLHDPAR U S O O S L S E B P I S T A B D L T R I I R L I O S M U T N F
---------------- ---------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0000000386BC2D08 0000000386BC2E58 N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
可以确认到有一个子游标 (地址 0000000386BC2D08). 因为这是第一个子游标,所以不匹配信息 (U S O O S L etc) 都是N。现在以另外用户登录执行相同的查询(select count(*) from emp),再次确认,有以下的输出结果:-
代码语言:javascript复制ADDRESS KGLHDPAR U S O O S L S E B P I S T A B D L T R I I R L I O S M U T N F
---------------- ---------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0000000386BC2D08 0000000386BC2E58 N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N
0000000386A91AA0 0000000386BC2E58 N N N N N N N N N N N N N Y N N N Y N N N N N N N N N N N N N
这次可以确认到出现了第二个子游标(0000000386A91AA0),与第一个子游标不能共享的理由('Y'表示不匹配):
(1) AUTH_CHECK_MISMATCH 以及 (2) TRANSLATION_MISMATCH
这是因为用户下的对象没有映射到(当前的子游标)的对象。因为不能访问的对象,以及每个用户中的对象都有不同的object_ids,导致转换失败,发生了不匹配现象。
如何理解v$SQL_SHARED_CURSOR视图给出的理由?
下面是原因列表以及实际例子(标记的是非常常见原因) :
UNBOUND_CURSOR
现有的子游标没有构建完全(换言之, 该子游标没有被优化).
SQL_TYPE_MISMATCH
SQL类型与现有的子游标不匹配。例如,在两个版本不同的客户端上运行同一个应用程序,在服务器中产生不同的子游标。
OPTIMIZER_MISMATCH
优化器环境与现有的子游标不匹配 (修改优化器模式之后,现有的子游标不能被重新使用).
例如:
代码语言:javascript复制select count(*) from emp; ->> 1 父, 1 子游标
alter session set optimizer_mode=ALL_ROWS
select count(*) from emp; ->> 1 父, 2 子游标
注: 该行为适用于跟踪事件的设置。例如,如果使用 10046 打开跟踪,将新添加一个由于OPTIMIZER_MISMATCH引起的子游标。
OUTLINE_MISMATCH
OUTLINES 与现有的子游标不一致。例如:如果用户之前为这个SQL创建了存储OUTLINES,并且这些OUTLINES被存储在不同的分类里(称为"OUTLINES1" 和 "OUTLINES2")。如果执行下面的命令:
代码语言:javascript复制alter session set use_stored_outlines = OUTLINES1;
select count(*) from emp;
alter session set use_stored_oulines= OUTLINES2;
select count(*) from emp;
第二次执行"select from emp" 将创建另一个子游标,因为使用的OUTLINES与第一次运行的OUTLINES不同。这个子游标将被标记为 OUTLINE_MISMATCH。
STATS_ROW_MISMATCH
现有的统计数据与现有的子游标不匹配。检查是否在所有会话上都设置了10046/sql_trace,因为这可能导致这种情况。
LITERAL_MISMATCH
非数据字面值与现有的子游标不匹配。
SEC_DEPTH_MISMATCH
安全级别与现有的子游标不匹配。
EXPLAIN_PLAN_CURSOR
子游标是一个 explain plan 游标,不应该被共享。explain plan 句将默认生成一个新的子游标--这种情况将不匹配。
BUFFERED_DML_MISMATCH
缓冲的DML与现有的子游标不匹配。
PDML_ENV_MISMATCH
PDML环境与现有的子游标不匹配。参数 parallel_dml_mode 和/或 parallel_max_degree 可能已经改变。
INST_DRTLD_MISMATCH
直接加载插入与现有的子游标不匹配。
SLAVE_QC_MISMATCH
现有的子游标是一个工作游标,而新的游标是由协调者发出的(或者,现有的子游标是由协调者发出的,而新的是一个工作游标)。
TYPECHECK_MISMATCH
现有的子游标没有完全优化。
AUTH_CHECK_MISMATCH
对于现有的子游标,认证/翻译检查失败。
用户没有权限访问以前任何版本游标中的对象。一个典型的例子是,对于一个表,每个用户都有一个属于自己的副本。
BIND_MISMATCH
绑定元数据与现有的子游标不匹配。例如,在下面的语句中,绑定变量'a'的定义在两条语句中发生了变化:
代码语言:javascript复制variable a varchar2(100);
select count(*) from emp where ename = :a ->> 1 PARENT, 1 CHILD
variable a varchar2(400);
select count(*) from emp where ename = :a ->> 1 PARENT, 2 CHILDREN
DESCRIBE_MISMATCH
在描述子游标时,类型检查堆不存在。
LANGUAGE_MISMATCH
语言句柄与现有的子游标不匹配。
TRANSLATION_MISMATCH
现有子游标的基本对象不匹配。
该对象的定义与当前的任何版本不匹配。通常这表明与对象不同的"AUTH_CHECK_MISMATCH"相同的问题。
ROW_LEVEL_SEC_MISMATCH
行级安全策略不匹配。
INSUFF_PRIVS
现有子游标所参考的对象的权限不足。
INSUFF_PRIVS_REM
现有子游标所参考的远程对象的权限不足。
REMOTE_TRANS_MISMATCH
现有子游标的远程基础对象不匹配。比如说:
代码语言:javascript复制USER1:
select count(*) from table@remote_db
USER2:
select count(*) from table@remote_db
尽管SQL是相同的,但remote_db所指向的dblink可能是一个私有的dblink,它解析到一个完全不同的对象。
LOGMINER_SESSION_MISMATCH
INCOMP_LTRL_MISMATCH
OVERLAP_TIME_MISMATCH
Error_on_overlap_time 不匹配。
SQL_REDIRECT_MISMATCH
SQL 重定向不匹配。
MV_QUERY_GEN_MISMATCH
生成物化视图查询。
USER_BIND_PEEK_MISMATCH
用户的 BIND PEEK 不匹配。
TYPCHK_DEP_MISMATCH
游标有类型检查的依赖性。
NO_TRIGGER_MISMATCH
触发器不一致。
FLASHBACK_CURSOR
对于闪回没有游标共享。
ANYDATA_TRANSFORMATION
数据转换有变化。
INCOMPLETE_CURSOR
不完整的游标。当绑定长度可以升级时(也就是说,找到了一个子游标,除了绑定长度不够之外,其他都匹配),旧的游标不能使用,并且建立一个新的。这意味着该版本可以被忽略。
TOP_LEVEL_RPI_CURSOR
最顶端的RPI游标。在并行查询的调用中,这是预期的行为(故意不分享)。
DIFFERENT_LONG_LENGTH
LONG值的长度不一致。
LOGICAL_STANDBY_APPLY
逻辑备库应用上下文不匹配。
DIFF_CALL_DURN
调用期间不一致。
BIND_UACS_DIFF
绑定UAC不匹配。
PLSQL_CMP_SWITCHS_DIFF
PL/SQL编译器开关不匹配。
CURSOR_PARTS_MISMATCH
游标 "parts executed" 不匹配。
STB_OBJECT_MISMATCH
STB 对象不一致(现在存在的). 关于STB_OBJECT_MISMATCH的说明 请阅读下面的博客:
https://blogs.oracle.com/optimizer/entry/my_cursor_wasn_t_shared
ROW_SHIP_MISMATCH
行的传输能力不匹配。
PQ_SLAVE_MISMATCH
PQ工作进程不匹配。如果遇到这种原因编号,并且正在使用并行执行(PX),那么请检查是否真的想使用它。这种不匹配可能是由于运行大量不需要并行执行的小SQL语句造成的。另外,如果使用的是11g之前的版本,可能会遇到Bug:4367986 。
TOP_LEVEL_DDL_MISMATCH
最顶端的DDL游标。
MULTI_PX_MISMATCH
多个并行进程以及工作进程编译的游标。
BIND_PEEKED_PQ_MISMATCH
Bind-peeked PQ 游标。
MV_REWRITE_MISMATCH
物化视图重写游标。
ROLL_INVALID_MISMATCH
超过了滚动无效窗口。这是由DBMS_STATS的滚动无效功能引起的。因为它的无效窗口已经超过了,所以子游标不能被共享。参考:
Document 557661.1 Rolling Cursor Invalidations with DBMS_STATS in Oracle10g
OPTIMIZER_MODE_MISMATCH
优化器模式不匹配。
PX_MISMATCH
并行查询执行不匹配。请参考以下显示此原因的已知问题:
Document 1629107.1 Common Bugs Associated with PX_MISMATCH
MV_STALEOBJ_MISMATCH
失效的物化视图对象不匹配。
FLASHBACK_TABLE_MISMATCH
闪回表不匹配。
LITREP_COMP_MISMATCH
Literal 替换的使用不匹配。
11g 新追加 :
- PLSQL_DEBUG 调试不匹配。会话的调试参数 plsql_debug 设置为true。
- LOAD_OPTIMIZER_STATS 游标共享的负载优化器统计。
- ACL_MISMATCH 检查ACL不匹配。
- FLASHBACK_ARCHIVE_MISMATCH 闪回归档不匹配。
- LOCK_USER_SCHEMA_FAILED 锁定用户和模式失败。
- REMOTE_MAPPING_MISMATCH 远程映射不匹配
- LOAD_RUNTIME_HEAP_FAILED 运行时堆栈不匹配。
- HASH_MATCH_FAILED 哈希值不匹配。如果由于哈希值不匹配导致共享失败,例如直方图数据不匹配或通过字面替换标记为不安全的范围谓词的情况,则设置为 "Y"(参考Bug 3461251)。
11.2 新追加:
- PURGED_CURSOR 被标记为清除的游标。该游标已被标记为使用dbms_shared_pool.purge进行了清除。
- BIND_LENGTH_UPGRADEABLE 绑定长度可升级,并且无法共享,因为一个绑定变量大小小于正在插入的新值(在早期版本中被标记为BIND_MISMATCH)。
- USE_FEEDBACK_STATS Cardinality反馈。正在使用Cardinality反馈,因此可以为当前执行形成一个新的计划。
- BIND_EQUIV_FAILURE 绑定值的选择性与用于优化现有子游标的选择性不一致。当使用自适应游标共享并且游标是绑定感知的,那么如果选择性超出了当前的范围,并且新的计划是可取的,那么就会产生一个新的子游标,其原因代码是不共享以前的计划。关于一个例子,请看文档<836256.1>。在例子中每次执行后,运行:
select sql_id, address, child_address, child_number, BIND_EQUIV_FAILURE from v$sql_shared_cursor where sql_id='19sxt3v07nzm4';
一旦游标被标记为绑定感知,并且看到了第二个计划,那么以下将是结果输出:
代码语言:javascript复制 SQL_ID ADDRESS CHILD_ADDRESS CHILD_NUMBER B
------------- ---------------- ---------------- ------------ -
19sxt3v07nzm4 000000007A1C0DE0 000000007A1BF980 0 N
19sxt3v07nzm4 000000007A1C0DE0 000000007A10DDB0 1 Y
可以看出,由于BIND_EQUIV_FAILURE,新的版本被创建。
11.2 中不再有 ROW_LEVEL_SEC_MISMATCH。
Version_rpt 脚本:
执行脚本 version_rpt 可以生成一个的v$sql_shared_cursor
视图的总结报告,并包含一些额外的诊断信息。该脚本可以在下面文档中找到:
Document 438755.1 High SQL Version Counts - Script to determine reason(s)
执行这个脚本: 使用SQL_ID(10g及以上)为所有超过100个版本的游标生成报告:
代码语言:javascript复制select b.* from v$sqlarea a ,table(version_rpt(a.sql_id)) b where loaded_versions >=100;
使用HASH_VALUE为所有超过100个版本的游标生成报告:
代码语言:javascript复制select b.* from v$sqlarea a ,table(version_rpt(null,a.hash_value)) b where loaded_versions>=100;
使用 sql_id cyzznbykb509s 为游标的生成报告:
代码语言:javascript复制select * from table(version_rpt('cyzznbykb509s'));
其他可以用来追踪的方法.
在10G中,可以使用 CURSORTRACE 来帮助调查为什么游标没有被共享。这个事件需要在 Oracle技术支持 的指导下使用,所产生的跟踪文件的内容是没有相关文档说明的。要获得一个特定SQL语句的跟踪文件,首先需要获得 hash_value (见上面的 select from v$sqlarea
)。然后用以下方法设置跟踪:-
alter system set events 'immediate trace name cursortrace level 577, address hash_value';
(levels 578-580 可以用于收集高级别的跟踪 (577=level 1, 578=level 2, 580=level 3)
这将在我们每次试图重用游标时向 user_dump_dest 写一个跟踪文件。 使用下面的命令关闭跟踪:-
代码语言:javascript复制alter system set events 'immediate trace name cursortrace level 2147483648, address 1';
请注意:10.2 中存在 Bug 5555371(在 10.2.0.4 中修复),游标跟踪不能完全关闭,单行条目仍然会因此而进入跟踪文件。规避方法是重新启动实例。这个BUG的影响程度取决于游标的执行情况(也会影响生成的跟踪文件的大小)。
11.2 也可以使用下面的命令收集 cursordump:
alter system set events 'immediate trace name cursordump level 16'
(请确保使用的是 system 级别,而不是session 级别)
这将转储与'optimizer_mismatch'问题的参数相关的一些附加信息。
在RDBMS的后期版本中,还有一些增强功能,可以转储更多关于子游标不能共享的实际原因的信息(即参数差异)。这些信息可以在 v$sql_shared_cursor
视图的REASON列中找到,是XML格式的。参见 Bug 16770590 的例子。
尽管使用了绑定变量,会有出现高版本数的情况吗?
考虑以下情况,其中 cursor_sharing=SIMILAR
代码语言:javascript复制select /* TEST */ * from emp where sal > 100;
select /* TEST */ * from emp where sal > 101;
select /* TEST */ * from emp where sal > 102;
select /* TEST */ * from emp where sal > 103;
select /* TEST */ * from emp where sal > 104;
SELECT sql_text,version_count,address
FROM V$SQLAREA
WHERE sql_text like 'select /* TEST */%';
SELECT * FROM V$SQL_SHARED_CURSOR WHERE kglhdpar = '&my_addr';
会看到几个版本,每个版本都没有明显的不被共享的理由。
说明:
当游标替换被启用时,游标共享的标准之一是,如果执行计划要根据字面的值来改变,那么绑定值应该与初始绑定值相匹配。这样做的原因是如果我们使用相同的游标,我们可能会得到一个次优计划。这种情况通常发生在根据字面的值,优化器会选择一个不同的计划。因此,在这个测试案例中,我们有一个带有>的谓词,如果这是一个等值谓词,我们将总是共享同一个子游标。如果应用程序开发人员准备接受次优计划并节省内存,那么他们需要将参数设置为强制。
"SIMILAR和FORCE的区别在于,SIMILAR迫使类似的语句共享SQL区域,而不会影响执行计划。 将CURSOR_SHARING设置为FORCE则迫使类似的语句共享SQL区域,可能会影响执行计划。"
也可以从10046跟踪(4/12级--BINDS)中看出一个绑定变量是否被认为是不安全的。 9i中的标志oacfl2和10g中的fl2将表示一个绑定变量是否不安全。
代码语言:javascript复制BINDS #2:
bind 0: dty=2 mxl=22(04) mal=00 scl=00 pre=00 oacflg=10 oacfl2=500 size=24
offset=0
bfp=1036d6408 bln=22 avl=04 flg=09
value=16064
bind 1: dty=2 mxl=22(04) mal=00 scl=00 pre=00 oacflg=10 oacfl2=500 size=24
offset=0
bfp=1036d4340 bln=22 avl=04 flg=09
在10g(10.2.0.5)和11g中,使用上面的例子查询,如下:
alter session set cursor_sharing=force;
alter session set events '10046 trace name context forever,level 12';
select /* TEST */ * from emp where sal > :"SYS_B_0"
END OF STMT
..
BINDS #3071441600:
Bind#0
oacdty=02 mxl=22(03) mxlc=00 mal=00 scl=00 pre=00
oacflg=10 fl2=0300 frm=00 csi=00 siz=24 off=0
kxsbbbfp=295c96f0 bln=22 avl=03 flg=09
value=103
"fl2=0300 "条目表明绑定是通过替换生成的,是不安全的 :
#define UACFBLTR 0x00000100 /* Bind was generated by LiTeRal replacement */
#define UACFUNSL 0x00000200 /* UNSafe Literal */
0x200条目是判断"安全"的重要标志。 有关这一主题的更多信息,请参见:
Document 377847.1 Unsafe Literals or Peeked Bind Variables Document 261020.1 High Version Count with CURSOR_SHARING = SIMILAR or FORCE
在版本数超过阈值时废弃父游标的功能增强
在11gr2中,引入了一个子游标增长很长的问题。为了解决这个问题,我们提出了一个功能增强请求Bug 10187168。当子游标增长超过一定数量时,无论是20还是100,它都会废弃父游标。为了开启这个功能增强的Bug,请设置如下参数:
- 如果11.2.0.3及以上版本,请设置以下参数:
"_cursor_obsolete_threshold" to 100 (this is the number of child cursor after which we obsolete it)
- 如果 11.2.0.2.21 和 11.2.0.3 之间, 那么设置:
"_cursor_features_enabled" to 1026 event 106001 with value 100 (as the parameter _cursor_obsolete_threshold is not present)
要显示被废弃的游标,请执行下面的查询:
代码语言:javascript复制select count(*) as version_count, sql_id
from v$sql
where is_obsolete = 'N'
group by sql_id
having count(*) > 125;
关于更多信息,请阅读以下关于所涉及的改进的文章:
Document 10187168.8 Enhancement to obsolete parent cursors if Version Count exceeds a threshold
带有自适应游标共享的高版本数
随着11g中自适应游标共享的引入,由于更多的子游标,可能会增加版本数。自适应游标共享是为了适应执行计划,这取决于绑定变量的选择性。关于自适应游标共享的更多信息,请查看以下说明:
Document 740052.1 Adaptive Cursor Sharing Overview
自适应游标共享概述的一些已知问题:
Document 7213010.8 Bug 7213010 - Adaptive cursor sharing generates lots of child cursors Document 8491399.8 Bug 8491399 - Adaptive Cursor Sharing does not match the correct cursor version for queries using CHAR datatype
已知问题
下面文档给出了已知问题的清单:
Document 120655.1 VIEW: "V$SQL_SHARED_CURSOR
" Reference Note
Be ware of BUG 30098251 - WNNN PROCCESSES CREATE AN EXCESSIVE NUMBER OF OPEN CURSORS
故障排除其他问题
关于其他性能问题的故障排除,请看:
Document 1377446.1 Troubleshooting Performance Issues
参考
NOTE:836256.1 - Adaptive Cursor Sharing: Worked Example
NOTE:120655.1 - VIEW: "V$SQL_SHARED_CURSOR
" Reference Note
NOTE:261020.1 - High Version Count with CURSOR_SHARING = SIMILAR or FORCE NOTE:557661.1 - Rolling Cursor Invalidations with DBMS_STATS.AUTO_INVALIDATE
NOTE:377847.1 - Unsafe Literals or Peeked Bind Variables
NOTE:2192862.1 - Using the Flashback Query Feature Results in a High Number of Child Cursors
NOTE:1985045.1 - SQL 版本数过高 – 原因判断脚本
SQL 版本数过高 – 原因判断脚本 (Doc ID 1985045.1)
SQL 版本数过高 – 原因判断脚本 (Doc ID 1985045.1)
High SQL Version Counts - Script to determine reason(s) (Doc ID 438755.1)
适用于:
Oracle Database Cloud Service - 版本 N/A 和更高版本 Oracle Database - Standard Edition - 版本 9.2.0.1 和更高版本 Oracle Database Cloud Schema Service - 版本 N/A 和更高版本 Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本 Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本 本文档所含信息适用于所有平台
Purpose
该函数基于 vsql_shared_cursor 视图生成汇总报告,并根据原因代码添加额外的诊断信息。它会统计 vsql_shared_cursor视图中任意字段为 'Y' 的 SQL 版本记录和所有字段都 'N' 的 SQL 版本记录。这个脚本在判断 SQL 语句有过高版本数的原因时特别有用,对诊断以下 ORA-600[17059] 错误也可能有用:
Document 8922013.8 Bug 8922013 - OERI [17059] / excess child cursors for SQL referencing REMOTE objects
对于报告中列出的 SQL 版本数的产生原因,请参考以下 note:
Document 120655.1 VIEW: "V$SQL_SHARED_CURSOR
" Reference Note (Includes list of bugs)
Document 296377.1 Troubleshooting: High Version Count Issues
Document 1377446.1 Troubleshooting Performance Issues
此函数不会取代 Oracle 支持人员要求的 v$sql_shared_cursor
输出。
提出问题,得到帮助,并分享您的心得
您想和其他 Oracle 客户,Oracle 雇员和行业专家对本话题进行更深入的探讨么?
点击这里 加入讨论,您可以提出问题,得到别人的帮助,并分享您的心得。
点击这里 访问 My Oracle Support 社区数据库性能优化主页,发现其他文章和有帮助的主题讨论。
Requirements
这个视图和函数必须用 SYS 用户连接到 DB 上安装(使用 / as sysdba连接),同时也必须用 SYS 用户运行使用。
这个函数可以输入 hash_value 或 sql id(10g版本和更高版本)作为参数。
Configuring
下载附件中的脚本: 最新的 version_rpt 函数 并执行如下
代码语言:javascript复制connect / as sysdba
start version_rpt3_25.sql
Instructions
根据所有版本数超过100 的游标的 SQL_ID 生成报告(10g 和更高版本)
代码语言:javascript复制set pages 2000 lines 100
SELECT b.*
FROM v$sqlarea a ,
TABLE(version_rpt(a.sql_id)) b
WHERE loaded_versions >=100; /* 如果是11.2.0.3或者包含了patch 10187168, 那么设置为30 */
根据所有版本数超过 100 的游标的 HASH_VALUE 生成报告
代码语言:javascript复制set pages 2000 lines 100
SELECT b.*
FROM v$sqlarea a ,
TABLE(version_rpt(NULL,a.hash_value)) b
WHERE loaded_versions>=100; /* 如果是11.2.0.3或者包含了patch 10187168, 那么设置为30*/
对 SQL_ID 等于 cyzznbykb509s 的游标生成报告
代码语言:javascript复制set pages 2000 lines 100
SELECT * FROM TABLE(version_rpt('cyzznbykb509s'));
注意(s):
对于已经包含了patch 10187168的数据库版本, _CURSOR_OBSOLETE_THRESHOLD的默认值是100. 因为这个值被认为太低,所以已经被增长到了1024 对于包含了patch 10187168的数据库版本比如11.2.0.3, 我们应该用一个比较小的值作为LOADED_VERSIONS (而不是大于100) 当然如果你或者你的应用程序需要,也可以把它增加到300或更高 参照
See: Document 10187168.8 Bug 10187168 - Enhancement to obsolete parent cursors if VERSION_COUNT exceeds a threshold
注意:在11g数据库及以上版本,这个脚本只会对因为 BIND* 原因导致的废弃的游标做统计
详见 "Consolidated details for BIND* columns" 部分
如果要统计其它废弃的游标,你需要查询 v
该版本报告脚本试图通过检查 IS_OBSOLETE 字段来统计废弃的游标。但是这个字段在 V$SQLAREA
视图中仅仅为了向后兼容---不管游标废弃与否,它的值都是 ’N’。对于某条 SQL 语句,不管有多少 parent cursor 或者被废弃的游标存在,VSQL视图,并且用ISOBSOLETE=′Y′作为条件统计行数。∗∗∗∗该版本报告脚本试图通过检查ISOBSOLETE字段来统计废弃的游标。但是这个字段在¨C36C视图中仅仅为了向后兼容−−−不管游标废弃与否,它的值都是’N’。对于某条SQL语句,不管有多少parentcursor或者被废弃的游标存在,VSQLAREA 中只显示一行记录。
Script
请参考文章的附件。
Sample Output
代码语言:javascript复制Note:438755.1 Version Count Report Version 3.2.5 -- Today's Date 24-jan-18 15:53
RDBMS Version :11.2.0.3.0 Host: XXX Instance 1 : XXX
==================================================================
Addr: 000000006D687E40 Hash_Value: 275110491 SQL_ID b6bkg4n86bqkv
Sharable_Mem: 163488 bytes Parses: 4 Execs:20
Stmt:
0 SELECT COUNT(*) AMC FROM T WHERE X=:B1
1
Versions Summary
----------------
OPTIMIZER_MISMATCH :3
OPTIMIZER_MODE_MISMATCH :6
BIND_LENGTH_UPGRADEABLE :8
Total Versions:11
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cursor_sharing = EXACT
_cursor_obsolete_threshold = 100 (See Note:10187168.8)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plan Hash Value Summary
-----------------------
Plan Hash Value Count
=============== =====
2966233522 12
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for OPTIMIZER_MISMATCH :
3 versions with statistics_level = all
3 versions with sqlstat_enabled = true
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for OPTIMIZER_MODE_MISMATCH :
3 versions with RULE
6 versions with ALL_ROWS
3 versions with FIRST_ROWS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Details for BIND_LENGTH_UPGRADEABLE :
Consolidated details for BIND* columns:
BIND_MISMATCH,USER_BIND_PEEK_MISMATCH,BIND_UACS_DIFF,BIND_LENGTH_UPGRADEABLE,etc and
BIND_EQUIV_FAILURE (Mislabled as ROW_LEVEL_SEC_MISMATCH BY bug 6964441 in 11gR1)
from v$sql_bind_capture
COUNT(*) POSITION MIN(MAX_LENGTH) MAX(MAX_LENGTH) DATATYPE BIND GRADUATION (PRECISION,SCALE)
======== ======== =============== =============== ======== =============== =================
12 1 32 2000 1 Yes (,)
SUM(DECODE(column,Y, 1, 0) FROM V$SQL
IS_OBSOLETE IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE
=========== ================= ============= ============
0 0 0 4
####
To further debug Ask Oracle Support for the appropiate level LLL.
alter session set events
'immediate trace name cursortrace address 275110491, level LLL';
To turn it off do use address 1, level 2147483648
================================================================
Note:
代码语言:javascript复制SQL> select * from table(sys.version_rpt('1fq1cmj3asb1g'));
COLUMN_VALUE
--------------------------------------------------------------------------------
Note:438755.1 Version Count Report Version 3.2.5 -- Today's Date 19-apr-21 13:06
RDBMS Version :19.0.0.0.0 Host: mtlpz1dbet01.db.interac.ca Instance 1 : emtaxd1p
1
Error :ORA-00904: "EXECUTIONS": invalid identifier
3.2.5 视图没有 executions 的列.
create or replace view h$pseudo_cursor as
select Pseudo_cursor, sql_id,obj_id hex_obj_id
,obj# object_id, u.name owner, o.name object_name
,address,hash_value,SHARABLE_MEM,parse_calls,VERSION_COUNT,is_obsolete
from (select distinct
KGLNAOBJ Pseudo_cursor,kglobt03 sql_id
,KGLHDPAR address,KGLNAHSH hash_value
,KGLOBHS0 KGLOBHS1 KGLOBHS2 KGLOBHS3 KGLOBHS4 KGLOBHS5 KGLOBHS6 SHARABLE_MEM
,KGLOBT12 parse_calls
,KGLHDEXC executions
,KGLOBCCC VERSION_COUNT
,decode(kglobt33, 1, 'Y', 'N') is_obsolete
,substr(KGLNAOBJ
,instr(KGLNAOBJ,'_',1,3) 1
,instr(KGLNAOBJ,'_',1,4)-instr(KGLNAOBJ,'_',1,3)-1) obj_id
,(case when
replace(translate(substr(upper(KGLNAOBJ)
,instr(KGLNAOBJ,'_',1,3) 1
,instr(KGLNAOBJ,'_',1,4)
-instr(KGLNAOBJ,'_',1,3)-1)
,'0123456789ABCDEF','................')
,'.') is null then 'Y' else 'N' end) is_safe_to_compare
from x$kglob) k
, obj$ o, user$ u
where obj#=decode(is_safe_to_compare,'Y',to_number(obj_id,'xxxxxxxxxx'),0)
and o.owner#=u.user#;
3.2.4 版本的视图有 executions 列.
create or replace view h$pseudo_cursor as
select Pseudo_cursor, sql_id,obj_id hex_obj_id
,obj# object_id, u.name owner, o.name object_name
,address,hash_value,SHARABLE_MEM,parse_calls,executions,VERSION_COUNT,is_obsolete
from (select distinct
KGLNAOBJ Pseudo_cursor,kglobt03 sql_id
,KGLHDPAR address,KGLNAHSH hash_value
,KGLOBHS0 KGLOBHS1 KGLOBHS2 KGLOBHS3 KGLOBHS4 KGLOBHS5 KGLOBHS6 SHARABLE_MEM
,KGLOBT12 parse_calls
,KGLHDEXC executions
,KGLOBCCC VERSION_COUNT
,decode(kglobt33, 1, 'Y', 'N') is_obsolete
,substr(KGLNAOBJ
,instr(KGLNAOBJ,'_',1,3) 1
,instr(KGLNAOBJ,'_',1,4)-instr(KGLNAOBJ,'_',1,3)-1) obj_id
,(case when
replace(translate(substr(upper(KGLNAOBJ)
,instr(KGLNAOBJ,'_',1,3) 1
,instr(KGLNAOBJ,'_',1,4)
-instr(KGLNAOBJ,'_',1,3)-1)
,'0123456789ABCDEF','................')
,'.') is null then 'Y' else 'N' end) is_safe_to_compare
from x$kglob) k
, obj$ o, user$ u
where obj#=decode(is_safe_to_compare,'Y',to_number(obj_id,'xxxxxxxxxx'),0)
and o.owner#=u.user#;
看起来3.2.5版本中已经没有 execution 列
讨论高版本计数问题
还有疑问吗?考虑在这个链接发表问题讨论Database Tuning Community.
参考
NOTE:8922013.8 - Bug 8922013 - OERI [17059] / excess child cursors for SQL referencing REMOTE objects
NOTE:2896923.1 - 故障排除: 版本数高(High Version Count)的问题
NOTE:120655.1 - VIEW: "V$SQL_SHARED_CURSOR
" Reference Note
NOTE:296377.1 - Troubleshooting: High Version Count Issues