查看: 12411|回复: 15

[精华] 一个internal的问题:Oracle的一个extent中的block在物理存储上是连续的吗?

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2003-12-22 15:56 | 显示全部楼层 |阅读模式
如果是:
     Oracle是如何做到这一点的,尤其是经过stripe以后的磁盘阵列(如raid0+1,raid1+0),我感觉不太可能

如果不是:
     那就是说一个extent中的block在物理磁盘上是分散的,这样的话做segment的coalese还有任何意义吗?因为如果Oracle无法得知一个block存放在磁盘的具体位置,他就不可能得知两个extent之间是不是物理上相邻的,这样的话所谓coalese也只是fet$中相邻编号(block#)的extent被coalese,对性能的提高方面也只是加快找到空闲块速度的作用而已,对IO能力实在没什么提高。

   这样的话我是不是可以认为,
   1.所谓的碎片只是fet$,uet$ 表和所谓extent map block中extent map的碎片(在dmt上),而不是物理存储的碎片,只需要加工一下这些表就可以解决碎片问题了,解决了碎片问题也无法提高IO性能。
   
   2.system events中的db file scattered read,db file squenced read都是针对block#来说的,和物理读写的地址无关

   3.对db_file_multiblock_read_count这个参数的含义又模糊了,这里的read_count是指连续读这么多个block#的还是在磁盘连续区域上读这么多个块呢?前者可能还有点意义,后者似乎就是在浪费了。
   
呵呵,就想到这些,欢迎大家讨论!
论坛徽章:
0
发表于 2003-12-22 16:20 | 显示全部楼层
At the finest level of granularity, Oracle stores data in data blocks (also called logical blocks, Oracle blocks, or pages). One data block corresponds to a specific number of bytes of physical database space on disk.

The next level of logical database space is an extent. An extent is a specific number of contiguous data blocks allocated for storing a specific type of information.
一个extent是特定数量的连续的data blocks,由此可见extent在物理上是连续的。

Oracle allocates space for segments in units of one extent. When the existing extents of a segment are full, Oracle allocates another extent for that segment. Because extents are allocated as needed, the extents of a segment may or may not be contiguous on disk.
由此可见,segment在物理上是不连续的。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2003-12-22 16:39 | 显示全部楼层
最初由 southron 发布
[B]
The next level of logical database space is an extent. An extent is a specific number of contiguous data blocks allocated for storing a specific type of information.
一个extent是特定数量的连续的data blocks,由此可见extent在物理上是连续的。
[/B]


number of contiguous data blocks,这里的连续也是逻辑上的连续吧。在raid0的环境里,感觉很难说什么叫物理连续了

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-12-22 20:12 | 显示全部楼层
对于做了 RAID0/5  (条带化) 的系统而言,谈extent物理的连续已经没有意义了

没有做 RAID0/5  (条带化) ,在文件系统上,若文件系统上经常删除文件扩展文件,那文件本身就不是连续的,所以再谈物理联系意义也不大

若没有做raidRAID0/5  (条带化) 并且是raw  device 或者 比如linux 下的 ext3 这样的文件系统,在物理上连续。

对于db_file_multiblock_read_count,若使用磁盘阵列,实际上,os的IO,在阵列上应该是已经重整或者优化过了,不需要物理的连续。更何况很多存储设备本身就有很大的cache

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2003-12-22 22:36 | 显示全部楼层
最初由 biti_rainy 发布
[B]对于做了 RAID0/5  (条带化) 的系统而言,谈extent物理的连续已经没有意义了

没有做 RAID0/5  (条带化) ,在文件系统上,若文件系统上经常删除文件扩展文件,那文件本身就不是连续的,所以再谈物理联系意义也不大

若没有做raidRAID0/5  (条带化) 并且是raw  device 或者 比如linux 下的 ext3 这样的文件系统,在物理上连续。

对于db_file_multiblock_read_count,若使用磁盘阵列,实际上,os的IO,在阵列上应该是已经重整或者优化过了,不需要物理的连续。更何况很多存储设备本身就有很大的cache [/B]


不错,阵列上已经优化了IO,但是我关心的是db_file_multiblock_read_count发出的读请求到底是请求哪些块呢?
,假设db_file_multiblock_read_count=8,用户需要得到dbablk 100,那Oracle发出的IO请求是
1。dbablk 100,101,102...107;
2。dbablk100 物理上附近的8块;
3。或者是你说的IO设备cache中dbablk 100附近的8块;
4。其他

   请求不同的话效果是会有区别的,如果是情况一的话,那加大db_file_multiblock_read_count对OLAP类型的应用的确有比较大的作用,如果是情况2和3的话,就算重整IO,效率高也没用,因为本身就是可能IO浪费,对提高内存的hit ratio没什么好处。

   能否通过试验验证到底是哪种情况呢?告诉我方法就行,谢谢!

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-12-22 23:55 | 显示全部楼层
是该编号附近的在同一个extent内的blocks

这个在metalink文档中有说明

windows下测试

SQL> drop table t;

表已丢弃。

SQL> create table t tablespace test as select * from dba_objects;

表已创建。

SQL> insert into t select * from t;

已创建6331行。

SQL> commit;

提交完成。

SQL> select file_id,extent_id,block_id,blocks from dba_extents where owner='TEST' and segment_name='
T';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         4          0          9         32
         4          1         41         32
         4          2         73         32
         4          3        105         32
         4          4        137         32

SQL> alter session set db_file_multiblock_read_count=16;

会话已更改。

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER,LEVEL 12';

会话已更改。

SQL>
SQL> select count(*) from t;

  COUNT(*)
----------
     12662

SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

trace

PARSING IN CURSOR #1 len=22 dep=0 uid=23 oct=3 lid=23 tim=136424432868 hv=2199322426 ad='7b3e0898'
select count(*) from t
END OF STMT
PARSE #1:c=0,e=21795,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=136424432851
BINDS #1:
EXEC #1:c=0,e=4015,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=136424456603
WAIT #1: nam='SQL*Net message to client' ela= 11 p1=1111838976 p2=1 p3=0
WAIT #1: nam='db file scattered read' ela= 33200 p1=4 p2=10 p3=16
WAIT #1: nam='db file scattered read' ela= 21724 p1=4 p2=26 p3=15
WAIT #1: nam='db file scattered read' ela= 3197 p1=4 p2=41 p3=16
WAIT #1: nam='db file scattered read' ela= 11001 p1=4 p2=57 p3=16
WAIT #1: nam='db file scattered read' ela= 2687 p1=4 p2=73 p3=15
FETCH #1:c=40057,e=130616,p=78,cr=160,cu=0,mis=0,r=1,dep=0,og=4,tim=136424598085



SQL> drop table t;

表已丢弃。

SQL> create table t tablespace users as select * from dba_objects;

表已创建。

SQL> insert into t select * from t;

已创建6331行。

SQL> /

已创建12662行。

SQL> commit;

提交完成。

SQL> select file_id,extent_id,block_id,blocks from dba_extents where owner='TEST' and segment_name='
T';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3          0         33          8
         3          1         73          8
         3          2         81          8
         3          3         89          8
         3          4        169          8
         3          5        177          8
         3          6        185          8
         3          7        193          8
         3          8        201          8
         3          9        209          8
         3         10        217          8

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3         11        225          8
         3         12        233          8
         3         13        241          8
         3         14        249          8
         3         15        257          8
         3         16      12169        128
         3         17      12297        128

已选择18行。

SQL> alter session set db_file_multiblock_read_count=20;

会话已更改。

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER,LEVEL 12';

会话已更改。

SQL>
SQL> select count(*) from t;

  COUNT(*)
----------
     25324

SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

C:\>


PARSING IN CURSOR #1 len=22 dep=0 uid=23 oct=3 lid=23 tim=136872504466 hv=2199322426 ad='7b3e0898'
select count(*) from t
END OF STMT
PARSE #1:c=0,e=1159,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=136872504449
BINDS #1:
EXEC #1:c=0,e=4618,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=136872527767
WAIT #1: nam='SQL*Net message to client' ela= 10 p1=1111838976 p2=1 p3=0
WAIT #1: nam='db file scattered read' ela= 27197 p1=3 p2=36 p3=5
WAIT #1: nam='db file scattered read' ela= 23246 p1=3 p2=73 p3=8
WAIT #1: nam='db file scattered read' ela= 1346 p1=3 p2=82 p3=7
WAIT #1: nam='db file scattered read' ela= 3372 p1=3 p2=89 p3=8
WAIT #1: nam='db file scattered read' ela= 17965 p1=3 p2=170 p3=7
WAIT #1: nam='db file scattered read' ela= 2460 p1=3 p2=177 p3=8
WAIT #1: nam='db file scattered read' ela= 1403 p1=3 p2=186 p3=7
WAIT #1: nam='db file scattered read' ela= 1759 p1=3 p2=193 p3=8
WAIT #1: nam='db file scattered read' ela= 1444 p1=3 p2=202 p3=7
WAIT #1: nam='db file scattered read' ela= 1454 p1=3 p2=209 p3=8
WAIT #1: nam='db file scattered read' ela= 1053 p1=3 p2=218 p3=5


由上面p1  file_id   p2  block_id   p3  blocks 可以看出IO次数和相关blocks

事实上一次IO除了和这个参数有关,还和extent有关,一次IO是不能越过extent的

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-12-23 00:00 | 显示全部楼层
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> insert into t select * from t;

已创建25324行。

SQL> commit;

提交完成。

SQL> select file_id,extent_id,block_id,blocks from dba_extents where owner='TEST' and segment_name
T';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3          0         33          8
         3          1         73          8
         3          2         81          8
         3          3         89          8
         3          4        169          8
         3          5        177          8
         3          6        185          8
         3          7        193          8
         3          8        201          8
         3          9        209          8
         3         10        217          8

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3         11        225          8
         3         12        233          8
         3         13        241          8
         3         14        249          8
         3         15        257          8
         3         16      12169        128
         3         17      12297        128
         3         18      12425        128
         3         19      12553        128

已选择20行。

SQL> alter session set db_file_multiblock_read_count=20;

会话已更改。

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER,LEVEL 12';

会话已更改。

SQL> select count(*) from t;

  COUNT(*)
----------
     50648

SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

C:\>

=====================
PARSING IN CURSOR #1 len=22 dep=0 uid=23 oct=3 lid=23 tim=137237788846 hv=2199322426 ad='7b3e0898'
select count(*) from t
END OF STMT
PARSE #1:c=0,e=230,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=137237788829
BINDS #1:
EXEC #1:c=0,e=3961,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=137237812525
WAIT #1: nam='SQL*Net message to client' ela= 10 p1=1111838976 p2=1 p3=0
WAIT #1: nam='db file scattered read' ela= 29105 p1=3 p2=36 p3=5
WAIT #1: nam='db file scattered read' ela= 23441 p1=3 p2=73 p3=8
WAIT #1: nam='db file scattered read' ela= 1372 p1=3 p2=82 p3=7
WAIT #1: nam='db file scattered read' ela= 1549 p1=3 p2=89 p3=8
WAIT #1: nam='db file scattered read' ela= 19690 p1=3 p2=170 p3=7
WAIT #1: nam='db file scattered read' ela= 2588 p1=3 p2=177 p3=8
WAIT #1: nam='db file scattered read' ela= 1428 p1=3 p2=186 p3=7
WAIT #1: nam='db file scattered read' ela= 1479 p1=3 p2=193 p3=8
WAIT #1: nam='db file scattered read' ela= 1357 p1=3 p2=202 p3=7
WAIT #1: nam='db file scattered read' ela= 1487 p1=3 p2=209 p3=8
WAIT #1: nam='db file scattered read' ela= 1021 p1=3 p2=218 p3=5
WAIT #1: nam='db file sequential read' ela= 362 p1=3 p2=224 p3=1
WAIT #1: nam='db file scattered read' ela= 1658 p1=3 p2=225 p3=8
WAIT #1: nam='db file scattered read' ela= 2126 p1=3 p2=234 p3=7
WAIT #1: nam='db file scattered read' ela= 1508 p1=3 p2=241 p3=8
WAIT #1: nam='db file scattered read' ela= 1450 p1=3 p2=250 p3=7
WAIT #1: nam='db file scattered read' ela= 1490 p1=3 p2=257 p3=8
WAIT #1: nam='db file scattered read' ela= 42288 p1=3 p2=12171 p3=20
WAIT #1: nam='db file scattered read' ela= 3893 p1=3 p2=12191 p3=20
WAIT #1: nam='db file scattered read' ela= 7199 p1=3 p2=12211 p3=20
WAIT #1: nam='db file scattered read' ela= 1477 p1=3 p2=12231 p3=8
FETCH #1:c=130188,e=279571,p=185,cr=722,cu=1,mis=0,r=1,dep=0,og=4,tim=137238099800
WAIT #1: nam='SQL*Net message from client' ela= 620 p1=1111838976 p2=1 p3=0
FETCH #1:c=0,e=7,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=137238110581

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2003-12-23 00:03 | 显示全部楼层
明白了,非常清楚,谢谢biti!

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB技术丛书作者
日期:2010-09-26 15:24:56
发表于 2003-12-27 20:11 | 显示全部楼层
biti的风格真是合我的口味,赞

使用道具 举报

回复
论坛徽章:
9
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:猴
日期:2009-03-10 21:16:262010广州亚运会纪念徽章:马术
日期:2010-11-12 17:41:272010广州亚运会纪念徽章:高尔夫球
日期:2010-12-30 18:46:462011新春纪念徽章
日期:2011-02-18 11:42:50ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
发表于 2003-12-27 21:18 | 显示全部楼层
解释的very good

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表