eygle.com   eygle.com
eygle.com  
 

« 《循序渐进Oracle》一书的购买途径 | Blog首页 | Oracle 11g新特性:spfile Fault-tolerant增强 »

v$sql视图buffer_gets统计溢出为负数的现象

作者:eygle |【转载时请以超链接形式标明文章和作者信息及本声明
链接:

今天在Yangtingkun的Blog上看到了一则关于"ORACLE动态性能视图统计值溢出".

老Yang研究了一下v$sql.buffer_gets溢出位负数现象的原因,以前类似的,也看到过负数,没有深究,看到老Yang的研究成果,要学习记录一下。

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

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中这个增强被加入。

-The End-


历史上的今天...
      >> 2006-08-22文章:
             警惕骗子-以同学名义行骗
             《深入浅出Oracle》出版一月记
      >> 2004-08-22文章:
             经典图书推荐系列-之四
             经典图书推荐系列-之五
             经典图书推荐系列-之六
             经典图书推荐系列-之三
             经典图书推荐系列-之二
             经典图书推荐系列-之一
------
这篇 【v$sql视图buffer_gets统计溢出为负数的现象】来自 eygle.com | CSDN网摘| del.icio.us|Google订阅 | 鲜果订阅 | 抓虾订阅

By eygle on 2007-08-22 11:33 | Comments (2) | Posted to Internal | Edit |

相关文章 随机文章
  • Oracle KSL Latch 管理层 与 Latch管理
  • Oracle10gR2中的Mutex竞争的案例
  • CURSOR_SPACE_FOR_TIME 参数废弃
  • 关于Mutex的笔记
  • DBA警世录:bootstrap$的禁忌
  • 书不在多,精读则灵 - Oracle入门书籍推荐
    使用Oracle9i的blockrecover新特性修复数据库中的坏块
    Oracle Open World 2006文档下载
    五邑大学选用IBM存储搭建SAN存储架构
    关于Oracle的Dual表
    搜索本站:

    留言 (2)

    变成负数也不一定是不对的, 比如(-1) - (-5)可能就是4了, 就是这两个时间点真正的buffer gets了.

    Posted by: anysql at August 22, 2007 12:49 PM

    没说不对,只是一个显示和计算问题。

    Posted by: eygle at August 22, 2007 1:27 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004~2010 eygle.com, All rights reserved.