Oracle数据库扩展区(extent)概述

Oracle数据库扩展区(extent)概述

扩展区(extent)介绍

扩展区(extent)是数据库存储空间分配的逻辑单位 ,由多个连续数据块组成。

一个 扩展区(extent)总是包含在一个数据文件中。

每个段的第一个数据块包含该段中的扩展区(extent)目录。

在一个 扩展区(extent)中的数据块在逻辑上是连续的,但在物理上可能由于 RAID 条带化和文件系统的实施方式而在磁盘上分散分布。

分配扩展区(extent)

在默认情况下,在数据段被创建时,数据库会为数据段分配一个初始扩展区(extent)。一个 扩展区(extent)总是包含在一个数据文件中。

虽然还没有数据被添加到段中,在初始扩展区(extent)中的数据块被专门为段保留起来。

每个段的第一个数据块包含该段中的扩展区(extent)目录 。

下图显示了一个数据文件中某个段中的初始 扩展区(extent),它之前还没有包含任何数据

如果初始扩展区(extent)满了,并需要更多空间时,则数据库自动为该段分配一个增量扩展区(extent)。

一个增量扩展区(extent)是为该段创建的后续扩展区(extent)。

分配算法取决于表空间是本地管理的还是字典管理的。对于本地管理表空间,数据库搜索一个数据文件的位图,以查找相邻的可用数据块。如果该数据文件中没有足够的空间,则数据库到另一个数据文件中查找。

一个段的扩展区(extent)始终位于同一表空间中,但可能在不同的数据文件中。理解为段保存在表空间中,可以跨越数据文件,扩展区不能跨越数据文件,但是段中每一个扩展区,可以在不同的数据文件中。

下图显示,数据库可能为一个段,在表空间中的任意数据文件中分配扩展区(extent)。例如,段可能在 users01.dbf 中分配初始 扩展区(extent), 在 users02.dbf 中分配第一个增量扩展区(extent),并在 users01.dbf 中分配下一个 扩展区(extent)。

在新分配扩展区(extent)中的块,虽然他们是可用的,但可能并未清空旧数据。

在ASSM 中,对新分配扩展区(extent)中的块,只有当 Oracle 数据库开始使用它们时,才会根据需要将其格式化。

备注:本节仅适用于串行操作,即一个进程解析并运行一条语句。但在并行 SQL 语句中的扩展区(extent)具有不同的分配方式,它需要多个服务器进程。

释放扩展区(extent)

通常,用户段的扩展区(extent)不会返回给表空间,除非使用 DROP 命令删除该对象。

在 Oracle 数据库 11g 第 2 版中 (11.2.0.2),以及后续版本中,可以使用DBMS_SPACE_ADMIN 软件包删除段。例如,如果你删除了表中的所有行,但数据库不会回收数据块以供表空间中的其他对象使用。

注意:在一个撤消段中, 如果指定了 OPTIMAL 大小参数,或数据库处于自动撤消管理模式,则 Oracle 数据库会周期性地释放一个或多个扩展区(extent)。

在某些情况下,可以手动释放空间。基于对象中的碎片级别,Oracle 数据段顾问工具可帮助确定一个对象是否有空间可回收。以下技术可以释放扩展区(extent):

1、可以使用在线段收缩来回收在段中的零碎空间。段收缩是一种在线、 就地的操作。通常,紧凑的数据会获得更好的缓存利用率,且在全表扫描中只需读取更少的块。

2、可以将非分区表或表分区的数据移动到一个新的段,或可选地移入另一个你在其中具有配额的表空间。

3、可以重建或合并索引 。

4、可以截断表或表簇,这将删除所有行。默认情况下,除了留下由MINEXTENTS 存储参数所指定的扩展区(extent)数之外,Oracle 数据库将释放已删除行所使用的所有空间。在数据库 11g 第 2 版 (11.2.0.2) ,以及后续版本中中,还可以用带有 DROP ALL STORAGE 选项的 TRUNCATE 语句来删除整个段。

5、可以释放未使用的空间,即释放数据库段的高水位端的未使用空间,以便供表空间中的其他段使用。

当 扩展区(extent)被释放时,Oracle 数据库将修改本地管理表空间的数据文件中的位图,以反映重新获得作为可用空间的扩展区(extent)。被释放扩展区(extent)的数据块中的任何数据变得不可访问。

扩展区(extent)的存储参数

每一个段是由扩展区(extent)表示的存储参数来定义的。

这些参数控制 Oracle 数据库如何为段分配可用空间。

存储设置按如下的优先级顺序确定,列表中较高的设置会覆盖较低的设置:

1、段存储子句(最高优先级)

2、表空间存储子句

3、Oracle 数据库缺省值(最低优先级)

本地管理表空间可以具有统一的扩展区(extent)大小,或由系统自动确定可变的扩展区(extent)大小:

1、对统一的扩展区(extent),可以指定扩展区(extent)的大小,或使用默认的大小 1 MB。表空间中的所有扩展区(extent)都是一样大小。本地管理的临时表空间只能使用这种分配类型。

2、对于自动分配的扩展区(extent)由 Oracle 数据库确定新分配扩展区(extent)的最佳大小。

对本地管理表空间,其某些存储参数不能在表空间级指定。但是,可以在段级指定这些参数。在这种情况下,数据库使用所有参数一起计算段的初始大小。由内部算法确定每个后续扩展区(extent)的大小。

建议将《Oracle数据库逻辑存储结构》、《Oracle数据库表空间概述》、《Oracle数据库段segment概述》、《Oracle数据库扩展区(extent)概述》、《Oracle数据库数据块概述》这5篇文章一起看,对Oracle数据库的逻辑结构会有全面的理解。

相关推荐
程序员清风5 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律6 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵6 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅7 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_7 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界9 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB9 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛9 小时前
MySQL的操作
数据库·mysql
猫咪很可爱10 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
小豆庄10 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程