Oracle DB 管理空间


• 介绍Oracle DB Server 如何自动管理空间
• 使用压缩节省空间
• 主动监视和管理表空间的空间使用量
• 介绍Oracle DB 中的段的创建
• 控制延迟创建段
• 使用“段指导”
• 使用段收缩功能从表和索引中回收浪费的空间
• 管理可恢复的空间分配

  • 空间管理:概览
空间由Oracle DB Server 自动管理。Oracle DB Server  可以生成有关潜在问题的预警,并推荐可能的解决方案。
这些功能包括:
• Oracle Managed Files (OMF)
• 用位图进行的空闲空间管理(“本地管理”)和数据 文件自动扩展
• 主动的空间管理(默认阈值和服务器生成的预警)
• 空间回收(收缩段、联机重新定义表)
• 容量计划(增长报表)

空间管理:概览
通过使用Oracle Managed Files (OMF),你可以根据数据库对象(而不是文件名)来指定 操作。Oracle DB Server 可以用 位图来管理表空间内的空闲空间 。这称为“本地管理的” 表空间。此外,位于本地管理的表空间中的段内的空闲空间可以使用位图进行管理。这称 为“自动段空间管理”。位图化的实施可以避免很多与空间相关的表优化工作,同时能在 高峰负载期间提供更高的性能。另外,Oracle DB Server 还可以自动扩展数据文件,因此 文件可以根据其中的数据量自动增长。
创建数据库时,默认情况下将启用预先空间监视。(这不会对性能产生任何影响。)
Oracle DB Server 在正常空间分配和取消分配操作期间监视空间使用情况,如果空闲空间 的可用性低于预定义的阈值(可以覆盖此阈值),将发出预警。指导和向导可帮助你回收 空间。
计划容量时,Oracle DB Server 根据表结构和行数进行空间估计,并根据自动工作量资料 档案库(AWR) 中存储的历史空间使用情况来提供增长趋势报表。

  • 块空间管理

块空间管理
空间管理包括块级别的空闲空间管理。使用“自动段空间管理”时,每个块分为四部分, 分别称为FS1(空闲空间介于0 到25% 之间)、FS2(25% 到50% 空闲)、FS3(50% 到 75% 空闲)和FS4(75% 到100% 空闲)。
块的状态将根据其中空闲空间的级别自动更新。这样,你就可以根据所插入行的长度来判 断特定块能否满足插入操作的要求。请注意,“满”状态表示不能再向块中插入。
在示例中,左侧的块是一个FS3 块,因为其空闲空间介于50% 和75% 之间。执行 了一些插入和更新语句后,将达到PCTFREE(虚线处),并且不能再向该块中插入新行。
现在该块被视为“满”或FS1 块。块的空闲空间级别一旦降至低于下一部分,就会考虑 将该块再次用于插入。在上面这种情况中,空闲空间一旦超过25%,状态即变为FS2。
注:大对象(LOB) 数据类型(BLOB、CLOB、NCLOB和BFILE)不使用PCTFREE存储 参数。未压缩块和OLTP 压缩块的默认PCTFREE值为10;基本压缩块的默认PCTFREE 值为0。

  • 行链接和行迁移
示例:
• 更新时:行的长度增加,超过了块中 的可用空闲空间。
• 需要将数据存储在新块中。
• 将保留行的原始物理标识符(ROWID)。
• Oracle DB Server 需要读取两个块来 检索数据。
• “段指导”查找包含迁移行的段。
• 可以对块中的碎片空闲空间进行自动 合并。

行链接和行迁移
在以下两种情况下,表中某行的数据可能太大,无法包含在单个数据块中。
第一种情况:
在第一次插入行时,就发现行太大,无法包含在一个数据块中。在这种情况下,Oracle DB  Server 将在为该段保留的一系列数据块(一个或多个)中存储该行的数据。较大的行通常 要进行行链接,例如包含数据类型为LONG或LONG RAW的列的行。在这些情况下,行链 接是无法避免的。
但在第二种情况中,
最初可以包含在一个数据块中的行在更新后,整个行的长度增加了, 而块的空闲空间已经完全填满。在这种情况下,Oracle DB Server 假定整个行可以包含在新 数据块中,从而将整个行的数据迁移到新数据块中。数据库将保留迁移行的原始行片段,
以便指向包含迁移行的新块。迁移行的ROWID不变。
当行链接或迁移后,与此行关联的输入/输出(I/O) 性能会降低,因为Oracle DB Server 必须 扫描多个数据块来检索该行的信息。
“段指导”查找包含由UPDATE操作产生的迁移行的段。

Oracle DB 在以下情况下会以自动透明方式合并数据块的空闲空间:
• INSERT或UPDATE语句尝试使用包含足够空闲空间的块来容纳新的行片段
• 空闲空间已成为碎片,以致于行片段无法插入到块的相邻部分
合并之后,空闲空间量与操作前的空间量相同,但空间现在是连续的。

当行链接或迁移后,与此行关联的I/O 性能会降低,因为 Oracle DB Server 必须扫描多个数据块来检索该行的信息。

  • 段内的空闲空间管理
段内的空闲空间管理
• 由 段中的位图跟
好处:
• 空间使用更加灵活
• 运行时调整
BMB 的多进程搜索

空闲空间管理
可以自动管理数据库段内的空闲空间。段内的空闲空间或已用空间由位图跟踪。要利用此 功能,请在创建本地管理的表空间时,指定“自动段空间管理”。然后,指定的设置将应 用于随后在此表空间中创建的所有段。
自动空间管理段具有一组位图块(BMB),用于描述该段中数据块的空间使用情况。BMB  以树形层次结构组织。层次的根层存储在段头部中,其中包含对所有中间层BMB 的引用。
此层次的各个叶节点代表属于该段的一组连续数据块的空间信息。此层次的最大层数为三。
使用自动空间管理的好处包括:
• 改善空间使用情况,尤其是各行大小差异很大的对象的空间使用情况
• 对并行访问发生的变化进行更好的运行时调整
• 在性能方面或空间使用方面改善多实例行为
因此,DBA 可以少做一些工作。

  • 段的类型
段是为某个逻辑结构分配的一组区。段包括以下不同类型:
• 表和簇段
• 索引段
• 还原段
• 临时段
段由Oracle DB Server 动态分配。

段的类型
表和簇段:每个非聚簇表都有一个数据段。所有表数据都存储在表段的区中。对于分区表, 每个分区都有一个数据段。每个集群也都有一个数据段。集群中每个表的数据都存储在集 群的数据段中。
索引段:每个索引都有一个索引段,存储其所有数据。对于分区索引,每个分区都有一个 索引段。
还原段:Oracle DB 会维护用于回退对数据库所做更改的信息。此信息包括事务处理操作 的记录;这些操作统称为还原。还原信息存储在还原表空间的还原段中。
临时段:临时段是在SQL 语句需要临时数据库区域来完成执行时由Oracle DB Server 创建 的。语句完成执行后,临时段中的区将返回到系统,以备将来使用。
如果段的现有区变满,Oracle DB Server 将动态分配空间。因为区是根据需要分配的,所以 段中的区在磁盘上可能连续,也可能不连续。

  • 分配区
• 搜索数据文件的位图,以便获取所需数目的相邻空闲块
• 可用以下存储子句调整区的大小:
– UNIFORM 
– AUTOALLOCATE
• 查看区映射
• 获得取消分配建议
对于本地管理的表空间,Oracle DB Server 将查找要分配给新区的空闲空间,具体方法是:
先在表空间中确定候选数据文件,然后搜索数据文件的位图,以便获取所需数目的相邻空 闲块。如果该数据文件没有足够的相邻空闲空间,则Oracle DB Server 将在另一数据文件 中查找。
以下两个子句会影响区的大小调整:
• 使用UNIFORM子句,数据库可以按你指定的统一大小(或默认大小)为表空间中 创建的所有对象创建所有区。
• 使用AUTOALLOCATE子句,数据库可以为表空间确定区大小调整策略。
要在Oracle Enterprise Manager 中查看区映射,请选择“Server > Tablespaces > View  Tablespace > Show Tablespace Contents(服务器> 表空间> 查看表空间> 显示表空间 内容)”。
Oracle DB Server 提供了“Segment Advisor(段指导)”,使用该指导可以根据对象中 空间碎片的级别来帮助确定对象是否有空间可回收。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值