Oracle 12c: arraysize会影响结果集么?

SQL*Plus中ArraySize的设置会影响结果集的数量么?先不要轻易说“NO”,我们来看看Jonathan Lewis最近一篇文章中披露的一个案例。

当确定的查询在arraysize改变的情况下,结果集的数量出现不同:

SQL> set transaction read only; Transaction set. SQL> set arraysize 1 SQL> select ... ... 541 rows selected. SQL> set arraysize 4 SQL> select ... ... 599 rows selected. SQL> set arraysize 10 SQL> select ... ... 620 rows selected. SQL> set arraysize 32 SQL> select ... ... 616 rows selected.

从查询结果看,随着arraysize的不同,结果集的数量忽多忽少,这显然不科学,一定是BUG导致的。

在执行计划中,可以看到12c的主要的特殊之处在于:rowset 的出现。这是Oracle 12c中引入的一个新特性。

当然,对于每一个新特性,Oracle都会提供隐含参数去控制,我们可以通过设置 _rowsets_enable=false 去关闭这一新特性。

参考链接:

https://jonathanlewis.wordpress.com/2015/11/09/wrong-results/

Oracle Support很快响应这一问题并给出进一步的WorkAround,可以通过设置Event 10055的特定级别修复该问题:

event = "10055 trace name context forever, level 2097152"

这个Bug的补丁也很快被提供出来,大家可以通过MOS找到这个BUG的修复补丁:Bug 22173980 : WRONG RESULTS WHEN "_ROWSETS_ENABLED" = TRUE 。

其影响的范围是 12.1.0.1 和 12.1.0.2 。参考:Note 2079913.1 。对于CDB环境下,还有另外一个参数 _rowsets_cdb_view_enabled 与这一特性有关,必要时需要关闭这个特性。BUG 17016479 也值得参考。

公开的BUG信息指出,这个问题出现的原因在于:当HASH JOIN在RowSet之间进行多次处理时,在特定情况下,其索引(ridx)定位行有问题,导致返回的结果集出现错误。

Internal Problem Description
----------------------------
The failing query involved several nested loops on top of a hash join.The
 hash join consumed rowsets from its two inputs and produced one row at a time for its parent.The top nested loops returned the rows to kpofcr, which returned rows=0 when the array fetch size was reached (the default was 15). After all the fetch functions returned, the release functions were called, in order to end the call.
  In the release function of the hash join, after the child release was done, it restored the last row it returned to its parent.This involved a call to qesrSetupOneCtxRow to use a row in the rowset where it saved away the input rows.If the last row it returned happened to be the first row in the rowset,and the index (ridx) was set to 0,the release was incorrectly restoring the last row in the rowset instead of the first.This led to wrong results.

Internal Fix Description
------------------------
Modified the hash join release function to use the saved row index when the yet2finishrset_qerhjm flag is set, even if it is 0. That is,if it still has rows to process in the last rowset it received from the child, then the value stored in ridx is the last row that was returned to the parent.  Only in the case that it finished processing the input rowset (and yet2finishrset_qerhjm is false) will a value of 0 for ridx indicate that the last row returned was the last row in the last input rowset.

参考Jonathan和Mos的文档可以了解这个有趣的Bug。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2015-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ken的杂谈

Java VS .NET:Java与.NET的特点对比

.NET出生之后就带着Java的影子。从模仿到创新,.NET平台也越来越成熟。他们不同的支持者也经常因为孰弱孰强的问题争论不休。但是本文并不是为了一分高下。而是...

1114
来自专栏IT笔记

Nginx学习之配置RTMP模块搭建推流服务

写在开始 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能。同时提供按需加载、自定义组件和更多访问层级等新特性,增强了第三...

48411
来自专栏北京马哥教育

Linux系统六个最佳PDF文档阅览器,看看哪款更适合你

目前,互联网在线图书与其他相关文档正越来越多的使用PDF格式的文件,因此如果你使用的是桌面Linux发行版,那么选择一个合适的PDF阅览器就变得格外重要。 在本...

3215
来自专栏张善友的专栏

Visual Studio 2008 SP1和.NET FX 3.5 SP1发布了

NET Framework 3.5 SP1提供了以下新功能和改进: 1、ASP.NET 动态数据,它提供了丰富的框架,从而使用户可以快速进行数据驱动的开发,而...

1698
来自专栏ASP.NETCore

.Net Core迁移到MSBuild的多平台编译问题

  本篇主要讨论.NET Core应用程序项目结构的主题,重点探索.NET Core应用程序的多平台编译问题,这里指的多平台是指.NET Framework、....

842
来自专栏张戈的专栏

CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

这几天复习运维知识,也没怎么关注业界新闻,可等我一关注,又“捅娄子”了,Linux 继上次CVE-2014-6271漏洞爆发以来,再次爆发一个严重漏洞:CVE-...

2414
来自专栏跟着阿笨一起玩NET

DataTable.AcceptChanges & DataAdapter.Update

The AcceptChanges method makes rows status to Unchanged, then the DataAdapter.Up...

351
来自专栏数据和云

YH7:Oracle Global Data Services知识库

编辑手记:Oracle 12c新加入的GDS特性是针对复制数据库(使用复制技术,例如ADG,Ogg等)的完整自动化工作负载管理解决方案。 本文来自Oracle白...

3237
来自专栏魏琼东

使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面

一、前言     AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开...

2029
来自专栏Golang语言社区

社区leaf学习笔记|07. 游戏玩家注册、登陆(下)

Leaf服务器返回给H5的JSON消息结构 文件位置:server\login\internal\handler.go

531

扫码关注云+社区