ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 查询数据时,segment header被访问的次数

查询数据时,segment header被访问的次数

原创 Linux操作系统 作者:kewin 时间:2009-10-15 09:42:21 0 删除 编辑
在管理版上这样的说法:

如果是全表扫描,读取segment header之后会通过extent链的方式读下去,即使你drop掉表,由于物理块还是存在的所以不会出问题。
但是oracle每读10个extent会需要重新读取header一次,那么这个时候如果表不存在的话,会发现在数据字典里面已经不存在了,那么就会报表找不到。
和屏幕输出什么的没什么关系。。。

原文: http://www.itpub.net/viewthread. ... p;extra=&page=3

不太认同这样的说法,做了测试,如不对,欢迎大家指出:
测试环境: LINUX 4.6 + ORACLE 10.2.0.4
对象T1 的SEGEMNT 的信息:
SEGMENT_NAME                                                                         FILE_ID   BLOCK_ID
--------------------------------------------------------------------------------- ---------- ----------
T1                                                                                         1      55921
T1                                                                                         1      55929
T1                                                                                         1      55937
T1                                                                                         1      55945
T1                                                                                         1      55953
T1                                                                                         1      55961
T1                                                                                         1      55969
T1                                                                                         1      55977
T1                                                                                         1      55985
T1                                                                                         1      55993
可以看到SEGMENT HEADER 的BLOCK NUMBER为55921。
对象号为:17890, 所在的FILE NUMNER 为1。有80个BLOCK。
查询header被touch的次数:
select ADDR , FILE#, DBABLK   ,STATE ,  TCH  from x$bh where file#=1 and  OBJ=17890 and DBABLK=55921
在对TABLE做查询前先做查询,看SEGMENT HEADER 被访问的次数:
0000002A97A6D430          1      55921          1          8

进行查询:
SQL> select count(*) from t1;

  COUNT(*)
----------
      5790
再次查看SEGMENT HEADER被touch的次数:
SQL> /

ADDR                  FILE#     DBABLK      STATE        TCH
---------------- ---------- ---------- ---------- ----------
0000002A97A6D430          1      55921          1          9

看到touch次数只增加了1次,不是按照设想的增加为8+80/10=16次。

进行多次测试,结果都是一样的,都只增加一次。
将数据量变大为原先的4倍,再次测试结果也是一样的,都只增加一次。

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

上一篇: 学习摄影的贴子
请登录后发表评论 登录
全部评论

注册时间:2008-03-10

  • 博文量
    125
  • 访问量
    568835