楼主: 超级野人

大家说说oracle引入extent概念的目的是什么?

[复制链接]
论坛徽章:
16
咸鸭蛋
日期:2011-09-06 18:06:46三菱
日期:2013-08-19 19:29:14
11#
发表于 2004-10-3 22:18 | 只看该作者
因为回滚段的EXTENT的管理是个单向循环的链表管理方式。

使用道具 举报

回复
论坛徽章:
30
ITPUB元老
日期:2005-10-06 13:25:212011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14
12#
发表于 2004-10-8 14:13 | 只看该作者
extent这个概念也不是oracle独有的,别的关系型数据库都有extent这个概念,一组连续的最小存储单元。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
发表于 2004-10-10 12:18 | 只看该作者
最初由 idler 发布
[B]因为回滚段的EXTENT的管理是个单向循环的链表管理方式。 [/B]

单项链表指针不是可以修改的吗

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
14#
 楼主| 发表于 2004-10-12 11:24 | 只看该作者
最初由 eagle_fan 发布
[B]更方便啊,为什么不呢
一段连续的数据块比好多分散的数据库要好吧 [/B]


嗬嗬,可以说说原因么,是磁盘i/o中的考虑,还是别的什么原因。

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
15#
发表于 2004-10-13 11:03 | 只看该作者
我认为是为了避免数据的大量碎片的产生。如果没有extents,在不同表的并发空间扩展时,相邻block被分配给了不同的表,从存储体系机制来看,日后在做查询或更新时disk IO的浪费是严重的!性能就成问题。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2004-10-13 12:34 | 只看该作者
是不是这个原因呢,可是我认为,磁盘上的空间分配应该是操作系统的事情,比如说oracle想分配10个连续的block,在逻辑上可能是连续的,可是操作系统分配空间应该是以数据块为单位分配的,所以也有可能在物理上这些数据块不是连续的,又没有这种可能呢?

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
17#
发表于 2004-10-13 14:47 | 只看该作者
oracle里的block是由1--N个OS的block组成,记录着disk上的物理位置,当oracle分配连续block组成extent时使用了datafile里的物理地址,所以在disk上oracle的extent是连续的。至少在读写时使用了连续的OS block,I/O性能较优。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
18#
 楼主| 发表于 2004-10-13 15:42 | 只看该作者
最初由 xsb 发布
[B]oracle里的block是由1--N个OS的block组成,记录着disk上的物理位置,当oracle分配连续block组成extent时使用了datafile里的物理地址,所以在disk上oracle的extent是连续的。至少在读写时使用了连续的OS block,I/O性能较优。 [/B]


我还是认为只有操作系统才能做到这一点,你怎么知道在硬盘上的一个os  block或紧接着它的下一个os block是不是属于同一个数据文件。另外我还想问一句,操作系统是一数据块为单位来分配文件的存储空间的吧?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
19#
发表于 2004-10-17 11:21 | 只看该作者
1:一个extents只能分配给一个对象,例如table,它保证了在一定的存储空间内相连的block属于同一个table

2:oracle性能调优的一个要素就是尽量减小物理IO,假如没有extents,只有block,那么相连的block不一定属于同一个table,这时就不能使用一次读入同一个table的多个block的方法,而一次读入同一table的多个block有时能大大提高系统的性能,例如在对table进行full table scan时,oracle可以一次读入几个block,这样就能减少物理IO的次数

3:oracle需要在数据字典中记载对象(例如table)在文件中的物理位置,如果没有extents,那么table占据多少各块,就得有多少个条目与之相对应,对于上千万条的记录来说,数据字典中的条目数不是一个小数目,如果有extents,数据字典只要记录extents个数就行,而extents个数可以控制得很少,因为extent的大小可以呈指数递增

使用道具 举报

回复
论坛徽章:
27
授权会员
日期:2005-10-30 17:05:33管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36优秀写手
日期:2013-12-18 09:29:13马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
20#
发表于 2004-10-17 21:05 | 只看该作者
最初由 超级野人 发布
[B]

我还是认为只有操作系统才能做到这一点,你怎么知道在硬盘上的一个os  block或紧接着它的下一个os block是不是属于同一个数据文件。另外我还想问一句,操作系统是一数据块为单位来分配文件的存储空间的吧? [/B]


extent是物理上连续的db block,而不是逻辑上的连续
Oracle可以知道自己分配到的os block是不是连续的
extent是不能够跨越数据文件的

使用道具 举报

回复

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

本版积分规则 发表回复

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