v$filestat中PHYRDS负值

通过set autotrace 的执行计划看出查询v$filestat实际上是查询了X$KCFIOX$KCCFE

SQL> set autotrace on;
SQL> Select  file#,phyrds,phywrts from v$filestat;

FILE#     PHYRDS    PHYWRTS
----- ---------- ----------
    1     175397      12846
    2       6838      41451
    3     102878      51928
    4        722         81
    5     983802      19167
    6     310961      16126
    7     339664      18688
    8     204042      16283
    9      27524        436
   10      26169        647
   ......
   22   -1509449799  4298715
   ......
执行计划
--------------------------------------------------------------------------------
| Id  | Operation                | Name            | Rows  | Bytes | Cost (%CPU)
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |                 |     1 |    78 |     0   (0)
|   1 |  NESTED LOOPS            |                 |     1 |    78 |     0   (0)
|   2 |   FIXED TABLE FULL       | X$KCFIO         |     1 |    52 |     0   (0)
|   3 |   FIXED TABLE FIXED INDEX| X$KCCFE (ind:1) |     1 |    26 |     0   (0)
--------------------------------------------------------------------------------
Note
-----
   - 'PLAN_TABLE' is old version
统计信息
----------------------------------------------------
    8  recursive calls
    0  db block gets
    2  consistent gets
    0  physical reads
    0  redo size
  834  bytes sent via SQL*Net to client
  257  bytes received via SQL*Net from client
    4  SQL*Net roundtrips to/from client
    0  sorts (memory)
    0  sorts (disk)
   34  rows processed

 

-- v$fixed_view_definition中看出V$FILESTAT是基于GV$FILESTAT的视图


SQL> select * from v$fixed_view_definition where VIEW_NAME = 'V$FILESTAT';

VIEW_NAME
------------------------------
VIEW_DEFINITION
--------------------------------------------------------------------------------
V$FILESTAT
select  FILE# , PHYRDS , PHYWRTS , PHYBLKRD , PHYBLKWRT , SINGLEBLKRDS,  READTIM
 , WRITETIM, SINGLEBLKRDTIM, AVGIOTIM, LSTIOTIM, MINIOTIM, MAXIORTM,  MAXIOWTM f
rom GV$FILESTAT where inst_id = USERENV('Instance')

 

-- 而GV$FILESTAT是由x$kcfio k,x$kccfe创建的视图
SQL> select * from v$fixed_view_definition where VIEW_NAME='GV$FILESTAT';

VIEW_NAME
------------------------------
VIEW_DEFINITION
--------------------------------------------------------------------------------
GV$FILESTAT
select k.inst_id, k.kcfiofno,k.kcfiopyr,k.kcfiopyw,k.kcfiopbr,k.kcfiopbw, k.kcfi
osbr,k.kcfioprt,k.kcfiopwt,k.kcfiosbt,k.kcfioavg,k.kcfiolst,k.kcfiomin, k.kcfior
mx,k.kcfiowmx from x$kcfio k,x$kccfe f where f.fedup <> 0 and  f.fenum=k.kcfiofno

 

这个就是访问V$FILESTAT 在执行计划中看到x$kcfio k,x$kccfe  表的原因,

因为V$FILESTAT是基于x$kcfio k,x$kccfe 定义的。

 

 

 

--可以看出 X$KCFIO中 KCFIOPYR是NUMBER类型的
SQL> desc X$KCFIO
 名称          是否为空? 类型
 ------------- -------- ------------
 ADDR                   RAW(8)
 INDX                   NUMBER
 INST_ID                NUMBER
 KCFIOFNO               NUMBER
 KCFIOPYR               NUMBER
 KCFIOPYW               NUMBER
 KCFIOSBR               NUMBER
 KCFIOPRT               NUMBER
 KCFIOPWT               NUMBER
 KCFIOSBT               NUMBER
 KCFIOPBR               NUMBER
 KCFIOPBW               NUMBER
 KCFIOCRTR              NUMBER
 KCFIOCURTR             NUMBER
 KCFIOAVG               NUMBER
 KCFIOLST               NUMBER
 KCFIOMIN               NUMBER
 KCFIORMX               NUMBER
 KCFIOWMX               NUMBER
 KCFIOMBR               NUMBER
 KCFIOMBT               NUMBER
 KCFIOCTS               NUMBER


-- v$filestat中PHRDS也是NUMBER类型
SQL> desc v$filestat
 名称             是否为空? 类型
 ---------------- -------- --------
 FILE#                     NUMBER
 PHYRDS                    NUMBER
 PHYWRTS                   NUMBER
 PHYBLKRD                  NUMBER
 PHYBLKWRT                 NUMBER
 SINGLEBLKRDS              NUMBER
 READTIM                   NUMBER
 WRITETIM                  NUMBER
 SINGLEBLKRDTIM            NUMBER
 AVGIOTIM                  NUMBER
 LSTIOTIM                  NUMBER
 MINIOTIM                  NUMBER
 MAXIORTM                  NUMBER
 MAXIOWTM                  NUMBER


oracle文档中对PHYRDS的解释是Number of physical reads done

 

我理解为物理读的数量。理论上应该不是负值。出现了负值我认为应该:

 

1.分散IO.

  可能是这个数据文件上的物理读太多了,把这个数据文件上的表move到其它的表空间一部分。

 

2.优化SQL

找到这个表空间全表扫描多的sql,进行优化。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值