Segments概述

Segments

段是一个表空间内包含某个逻辑存储结构的所有数据的扩展区集合。

User Segments

在数据库中的单个数据段用于存储一个用户对象的数据。段有不同的类型。用户段的示例包括:

表、 表分区、或表簇

大对象或大对象分区

索引或索引分区

User Segment Creation

默认情况下,数据库使用延迟的段创建,当创建表和索引时,仅更新数据库元数据。在 Oracle 数据库 11g 第 2 版 (11.2.0.2) 中,数据库在创建分区时,也延迟段创建。在用户向表或分区中插入第一行时,数据库才创建表或分区、 及其LOB 列、和索引段等。延迟的段创建使您能够避免不必要地使用数据库资源。

表段与其索引段不必位于相同的表空间中。

Temporary Segments

当处理查询时,Oracle 数据库通常在SQL 语句执行的中间阶段需要临时工作区。可能需要临时段的典型操作包括排序、 哈希、和合并位图。当创建索引时,Oracle 数据库将索引段置于临时段,然后当索引创建完成时将其转换成永久段。

如果一个操作可以在内存中执行,则Oracle 数据库不会创建一个临时段。不过,如果不能使用内存,则数据库自动在磁盘上为其分配临时段。

Undo Segments

Oracle 数据库维护事务的操作记录,统称为撤消数据。Oracle 数据库使用撤消来执行下列操作:

回滚一个活动事务

? 恢复一个已终止的事务

? 提供读取一致性

? 执行一些逻辑闪回操作

Undo Segments and Transactions

当事务启动时,数据库将此事务绑定到 (分配给)一个撤消段,并因此也绑定到当前撤消表空间中的一个事务表。在极少数的情况下,如果数据库实例没有一个指定的撤消表空间,则该事务被绑定到系统撤消段。

多个活动事务可以同时写入同一个撤消段或不同的撤消段。例如,事务T1 和 T2可以同时写入撤消段 U1,或 T1写入 U1而 T2 写入U2。

从概念上讲,一个撤消段中的扩展区形成一个环。事务先写到一个撤消扩展区,然后写到环中的下一个扩展区,如此等等,循环往复。图显示两个事务 T1 和 T2,从一个撤消段的第三个扩展区开始写入,然后继续往第四个扩展区 (E4)写入。

在任何给定时间,一个事务仅在一个撤消段上的某个扩展区上顺序写入,该扩展区称为事务的当前扩展区。多个活动事务可以同时写入同一个当前扩展区或不同的当前扩展区。图显示事务 T1 和 T2 同时写入扩展区 E3。在一个撤消扩展区内某个数据块仅包含一个事务的数据。

当前撤消扩展区被填充后,第一个需要空间的事务将检查环中分配的下一个扩展区的可用性。如果下一个扩展区不包含活动事务数据,则该扩展区将成为当前扩展区。现在,需要空间的所有事务都可以写入新的当前扩展区内。在图中, 当E4 填满时,T1 和 T2 继续写入 E1,覆盖在 E1 中的非活动撤消数据。

如果下一个扩展区确实包含某个活动事务的数据,则数据库必须分配一个新的扩展区。图显示T1 和 T2同时写入E4的场景。当E4 填满时,这两个事务无法继续写入 E1,因为 E1 包含活动的撤消条目。因此,数据库为该撤消段分配新的扩展区 (E5)。事务继续写入E5。

Transaction Rollback

当发出了一个ROLLBACK语句时,数据库将使用撤消记录,来回滚未提交事务对数据库所做的更改。在恢复期间,数据库将回滚从联机重做日志应用到数据文件的任何未提交更改。当数据正在被其它用户更改时,撤消记录通过维护数据前像, 为在同一时间访问数据的用户提供读取一致性。

Segment Space and the High Water Mark

段空间和高水位标记

Oracle 数据库通过跟踪段中的块状态来管理空间。高水位标记 (HWM) 是段中的一个点,超过该点的数据块是未格式化和未使用过的。

MSSM使用空闲列表来管理段空间。在创建表时,段中的块并未被格式化。当一个会话初次向表中插入行时,数据库将搜索空闲列表来查找可用的块。如果数据库未找到可用的块,则它会预格式化一组块,并将它们放置在空闲列表中,并开始将数据插入到块中。在 MSSM中,全表扫描会读取HWM 之下的所有块。

ASSM不使用空闲列表,所以必须以不同的方式管理空间。当会话初次向表中插入数据时,数据库只格式化一个单一位图块,而不像在MSSM中那样预格式化一组块。位图取代了空闲列表,用于跟踪在段中的块的状态。数据库使用位图来查找可用的块,然后在往块写入数据之前将其格式化。ASSM 将插入操作分散到多个块,以避免并发问题。

在一个ASSM 段中的每个数据块处于以下状态之一:

在HWM之上

这些块是未格式化的,且从未使用过。

在HWM之下

这些块处于以下状态之一:

已分配,但当前未格式化且未使用

已格式化且包含数据

已格式化且为空,因为数据已被删除

将一个ASSM段描述为一系列水平的块。在创建表时,HWM 在左侧段的开头。因为还未插入数据,段中的所有块都还是未格式化且从未使用过。

假设一个事务将行插入到段中。数据库必须分配一组块来容纳这些行。已分配的块在HWM之下。数据库格式化该组中的一个位图块来容纳元数据,但不会预格式化组中其余的块。

HWM 之下的块是已分配的,而 HWM之上的块是既未分配也未格式化的。插入发生时,数据库可以写入到任何具有可用空间的块。由低位高水位标记 (低 HWM) 标记一个点,该点之下的所有块都已知是已格式化的,要么包含数据,或以前曾包含数据。

在图中,数据库选定了 HWM 和低HWM 之间的一个块,并往其中写入数据。数据库也可能会随意选择HWM 和低HWM 之间的任何其他块,或低 HWM 之下任何有可用空间的块。图中,在新填充块两边的块都还是未格式化的。

低 HWM在全表扫描中非常重要。因为HWM 之下的块只在被使用时才格式化,所以可能还有一些块是未被格式化的,如图所示。鉴于此,数据库读取位图块,以获取低HWM 的位置。数据库读取低 HWM之下的所有块,因为已知它们是已格式化的,然后仅仔细读取位于低 HWM 和 HWM 之间的已格式化块。

当 HWM 与低 HWM 之间的块填满时,HWM 向右推进,而低 HWM 相应推进到旧的 HWM 的位置。数据库不断插入数据,随着时间的推移,HWM 继续向右推进,而低 HWM总尾随其后。除非您手动重建、 截断、或缩小该对象,否则HWM 从不倒退。

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

转载于:http://blog.itpub.net/25427762/viewspace-1061097/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值