Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235860
  • 博文数量: 37
  • 博客积分: 2259
  • 博客等级: 大尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 00:08
文章分类

全部博文(37)

文章存档

2009年(17)

2008年(20)

我的朋友

分类: Oracle

2009-08-25 23:11:52

Oracle extent 存在的理由:提高管理效率
extents的特性:
1:一个extent由相连的多个blocks组成,多个extents组成一个segment
2oracle在为segment分配空间时,是以extent为单位
因此extents带来的好处:
1:空间分配、释放效率将会提升
oracle建议一个segmentextents数量一般不要超过1024,而对于big table可能包含上千万个block,如果没有extent,那么oracle就要分配上千万个block,而有了extent,只要分配上千个extents就行。extent表示大量的blocks效率很高,extent并不列出所有的block,而是列出起始两个block(因为extent是联系的,起始block就能定位一个extent),oracle分配空间的时间与extents的数目呈比例,与blocks数目没有很大关系。同理,在释放空间时,extent一样可以提高操作的效率。
对字典管理的表空间,extent作用很明显,如果没有extent,数据字典中必须记录各个block,如果big table占用上千万个block,那么数据字典也会大量占用,假设数据字典会占用上百万个block,分配或释放这些big table时,还要对这些上百万block的数据字典插入会删除,岂不会额外添加很多工作,
2:全表扫描
在进行全表扫描时,利用extent包含联系blocks的特性,可以一次读出多个字段,这样就能大大减少物理IO,极大提高扫描的效率。

every thing has two side
extent
带来的负面作用:
表空间碎片:
如果没有extentoracle在给segment分配空间时以block为单位,而block总是一样大的,典型的8k16k,这时每个block都可以得到利用。有了extentextent就是最小的分配单元,而extent的大小并不总是相等的,假设开始的的三个segment都很小,extent也不大,例如10blocks,如果第二个的segment释放后,在中间的那个10block就空闲出来,但是如果以后segment都要求分配至少20blockextent时,那么这10blocks的空闲空间就得不到利用,在极端情况下,表空间由100010block的空闲,但无法分配20blockextentexp/imp能消除碎片,本地管理的表空间对连续的碎片有自动处理的能力,但对不连续的碎片无能为力。
阅读(1880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~