Oracle中的 统计溢出为负数的现象(zt)

v$sql.buffer_gets由于采用的是C的int类型,C的unsigned int型可以表示2^32,而包含正负整数,就只能表示一半。所以这个数值经常会溢出而显示负数。随便找一个生产的数据库,就可以找到类似的情况:[@more@]

SQL> select sql_text,executions,to_char(buffer_gets) from v$sql where buffer_gets <0;

SQL_TEXT
------------------------------------------------------------------------------------------------------------------------
EXECUTIONS TO_CHAR(BUFFER_GETS)
---------- ----------------------------------------
select count(*) as col_0_0_ from HS_forummessage forummessa0_ where (forummessa0_.forumID=:1 )
205681 -1321805203

select count(info0_.NUMINFOGUID) as col_0_0_ from HS_INFO info0_, HS_C3_LEVEL level1_ where info0_.INTLEVEL=level1_.NUML
EVELID and info0_.INTENABLEDFLAG=1 and info0_.INTPUBLISHSTATE=1 and info0_.DATPUBLISHDATE<=:1 and info0_.NUMCATALOGGUID=
:2 and (level1_.INTLEVEL in (1 , 2 , 3 , 4 , 5)) order by info0_.DATPUBLISHDATE DESC, info0_.NUMORDER DESC
14718967 -1261787636

select count(info0_.NUMINFOGUID) as col_0_0_ from HS_INFO info0_ where info0_.INTENABLEDFLAG=1 and info0_.INTPUBLISHSTAT
E=1 and info0_.DATPUBLISHDATE<=:1 and (info0_.NUMCATALOGGUID in (select catalog1_.NUMCATALOGGUID from HS_CATALOG catalog
1_ where catalog1_.INTCATALOGTYPE=1 and catalog1_.NUMAPPGUID=:2)) and (info0_.VC2INDEXWORDS like :3)
359138 -1950604219

也就是说v$sql视图中的buffer_gets最多能表示:

SQL> select power(2,32)/2 from dual;

POWER(2,32)/2
-------------
2147483648

基本上超过了2 billion,就要转为负数了。

那么这是不是一个Bug呢?
搜索Metalink可以发现很多相关的Bug报告,例如bug no:5689640

但是最终Oracle不认为这是一个Bug,因为即使底层表x$kglob的相关值定义从KQFCINT() 变更位 KQFCUIN()。也只不过将这个限制扩大了一倍而已,这个限制早晚还会被达到。
所以,这个修正请求被Oracle定义位增强而不是Bug。据说在Oracle11g中这个增强被加入。

http://www.eygle.com/archives/2007/08/vsql_buffer_gets_negative.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-1006727/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-1006727/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值