oracle 统计信息 sort,v$tempfile与v$sort_usage之关系解析

v$tempfile与v$sort_usage之关系解析

6ee5639a40442445944d63b514b2dd02.png

在前面的V$TEMPSEG_USAGE与Oracle排序中我谈到V$TEMPSEG_USAGE和V$SORT_USAGE同源,其中的SEGFILE#代表的是绝对文件号(AFN).

那么对于临时表空间的临时文件来说,这个字段可以和什么字段进行关联呢?

我们再来看一下V$TEMPFILE的来源,V$TEMPFILE由如下语句创建:

SELECT tf.inst_id, tf.tfnum, TO_NUMBER (tf.tfcrc_scn),

TO_DATE (tf.tfcrc_tim, 'MM/DD/RR HH24:MI:SS', 'NLS_CALENDAR=Gregorian'),

tf.tftsn, tf.tfrfn,

DECODE (BITAND (tf.tfsta, 2), 0, 'OFFLINE', 2, 'ONLINE', 'UNKNOWN'),

DECODE (BITAND (tf.tfsta, 12),

0, 'DISABLED',

4, 'READ ONLY',

12, 'READ WRITE',

'UNKNOWN'

),

fh.fhtmpfsz * tf.tfbsz, fh.fhtmpfsz, tf.tfcsz * tf.tfbsz, tf.tfbsz,

fn.fnnam

FROM x$kcctf tf, x$kccfn fn, x$kcvfhtmp fh

WHERE fn.fnfno = tf.tfnum

AND fn.fnfno = fh.htmpxfil

AND tf.tffnh = fn.fnnum

AND tf.tfdup != 0

AND fn.fntyp = 7

AND fn.fnnam IS NOT NULL

考察x$kcctf底层表,我们注意到TFAFN(temp file absolute file number)在这里存在:

SQL> desc x$kcctf

Name                          Null?    Type

----------------------------- -------- --------------------

ADDR                                   RAW(4)

INDX                                   NUMBER

INST_ID                                NUMBER

TFNUM                                  NUMBER

TFAFN                                  NUMBER TFCSZ                                  NUMBER

TFBSZ                                  NUMBER

TFSTA                                  NUMBER

TFCRC_SCN                              VARCHAR2(16)

TFCRC_TIM                              VARCHAR2(20)

TFFNH                                  NUMBER

TFFNT                                  NUMBER

TFDUP                                  NUMBER

TFTSN                                  NUMBER

TFTSI                                  NUMBER

TFRFN                                  NUMBER

TFPFT                                  NUMBER

而这个字段在构建v$tempfile时并未出现,所以我们不能通过v$sort_usage和v$tempfile直接关联绝对文件号.

通过LOB对象与临时段一文中方法我们可以简单构建一个排序段使用,然后来研究一下:

SQL> select username,segtype,segfile#,segblk#,extents,segrfno#

2  from v$sort_usage;

USERNAME SEGTYPE     SEGFILE#    SEGBLK#    EXTENTS   SEGRFNO#

-------- --------- ---------- ---------- ---------- ----------

SYS      LOB_DATA           9      18953          1          1

我们看到这里的SEGFILE#=9,而在v$tempfile是找不到这个信息的:

SQL> select file#,rfile#,ts#,status,blocks

2  from v$tempfile;

FILE#     RFILE#        TS# STATUS      BLOCKS

---------- ---------- ---------- ------- ----------

1          1          2 ONLINE       38400

我们可以从x$kcctf中获得这些信息,我们可以看到v$tempfile.file#实际上来自x$kcctf.tfnum,实际上是临时文件的顺序号,而绝对文件号是x$kcctf.tfafn,这个才可以和v$sort_usage.segfile#关联:

SQL> select indx,tfnum,tfafn,tfcsz

2  from x$kcctf;

INDX      TFNUM      TFAFN      TFCSZ

---------- ---------- ---------- ----------

0          1          9      38400

1          2         10      12800

临时表空间的绝对文件号可以通过如下查询获得:

SQL> select tm.file# Fnum ,tf.tfafn AFN,tm.name FName

2  from v$tempfile tm,x$kcctf tf

3  where tm.file# = tf.tfnum;

FNUM        AFN FNAME

---------- ---------- --------------------------------------------

1          9 /opt/oracle/oradata/conner/temp1.dbf

4         12 /opt/oracle/oradata/conner/temp2.dbf

至于其他就不再赘述。

By eygle on 2006-03-25 16:36 |

Comments (0) |

Internal | 720 |

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值