表空间管理及段空间管理总结

长平狐 发布于 2013/09/17 15:12
阅读 587
收藏 1

1.表空间管理技术实际上是管理的是EXTENT.

本地管理表空间LMT在每个数据文件头部加入位图区域管理的是EXTENT的使用情况.
EXTENT的使用和释放时ORACLE会在数据文件头的位图区域更新记录。

1.1EXTENT的管理

LMT有两种EXTENT空间分配方法:
自动分配autoallocate,此时ORACLE自己决定区块的使用方法,默认会按递增算法分配空间。
统一尺寸uniform ,手动指定每个区间的大小。----解决空间碎片的问题

1.2数据块与数据文件头保留空间关系

 本地管理表空间中,数据块大小db-block_size为16K或之下,数据文件头保留64K空间、

若是数据块32K大小,则保留128K。

默认的8KB块大小的表空间,ORACLE保留8个块用于管理。

数据块1.2用于记录数据文件头信息,3-8记录区间的位图信息。


2.段空间管理技术--BLOCK的管理

段类型主要有LOBINDEX,INDEX PARTITION,NESTED TABLE,TABLE PARTITION,ROLLBACK,LOB PARTITION
LOBSEGMENT,TABLE,INDEX,CLUSTER,TYPE2 UNDO。通过查询dba_segments的segment_type列得出。
凡是分配了空间的对象,都称之为段。
一个段对象被创建时,区间EXTENT被分配,后续使用中段的空间会以区间为单位不断扩展。
EXTENT是ORACLE的最小空间分配单元。BLOCK是ORACLE最小IO操作单元。
ORACLE以区间为单位 将空间分配给段对象,在段内,则是以BLOCK为单位进行空间使用和管理。

2.1  MMSM--手工段空间管理是通过在段头分配自由列表FREELIST来管理BLOCK的使用

把FREELIST比喻成一个表,ORACLE依赖相应算法在表中加入或移出BLOCK来实现段空间管理。
手动段空间管理涉及的参数:PCTFREE  空闲率,PCTUSED 使用率.  
注意PCTFREE,PCTUSED参数值和不能大于100%,当然两者和等于100%时也不太行了。。
如PCTFREE为20%,PCTUSED为40%时,一个BLOCK剩余空间达到20%(使用率80%)就不允许此BLOCK插入数据,
是为行更新预留的空间,此时BLOCK会从FREELIST中移出。
当BLOCK中数据删除,空间释放。空间使用低于PCTUSED的40%(即空闲空间达到60%)时,加入FREELIST.

不足之处:

 在Orale9i以前,表的剩余空间的管理与分配都是由链接列表freelist来完成的,因为freelist存在串行的问题因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA花费大量的精力去管理这些争用并监控表的空间利用。  


2.2   ASSM--自动段空间管理通过位图来管理存储扩展和FREE BLOCK。

即使BLOCK可用空间低于PCTFREE,也不会从位图中移除 。PCTUSED参数不再被需要,PCTFREE依然需要来不后续UPDATA操作保留空间。
此时FREELIST不再需要,通过位图数组(Bitmap Managed Segments(BMB 段))管理每个分配到对象的块。
每个块的剩余空间根据位图状态确定,即>75%. 50%-75%。 25%-50%。 <25%四种状态。
优势
简化管理-ASSM避免了手工设置大量的存储相关的参数,除了唯一的一个UCTFREE.
增大并发度-如果有多个事务并发访问一个段,对于MSSM,由于使用FREELIST列表进行空间管理,导致大量会话
反问这些列表,出现资源的争用和等待;ASSM由于不使用FREELIST方式管理空间,会有效避免这种资
源征用和等待。
RAC环境下能改善并发性能(不需要各个实例间互相访问大量的freelist表)
劣势
FTS(全表扫描)
大数据的加载,会导致性能下降。
影响索引的集群因子(clustering factor)

2.3 三级位图的概念

ORACLE最多支持三级位图。
一级位图用于管理具体数据块的使用。
二级位图块记录了一级位图块的地址。
三级位图块记录了二级位图块的地址。Segment Heade可以管理极大数据量的对象的空间,很难出现三级位图块。

原文链接:http://blog.csdn.net/q947817003/article/details/11370881
加载中
返回顶部
顶部