没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
逻辑存储结构
一、逻辑存储结构简介
Oracle 数据库为数据库中的所有数据分配逻辑空间,数据库空间分配的逻辑单元是数据块、
扩展区、 段、和表空间。在物理级,数据被存储在磁盘上的数据文件中,数据文件中的数据存储
在操作系统块中。以下是物理和逻辑存储的实体关系图。
Oracle 数据库逻辑上是由一个或多个表空间(表空间是 Oracle 中最大的逻辑存储单位)组成
的,表空间又是由一个或多个段(段是 Oracle 中占用空间的对象的总称)组成的,通过为每种不
同的数据对象分配不同的段,来保存数据,例如,EMP 表的所有数据会存放在 EMP 段中。段是由
一个或多个区(区是段的组成单位)组成的,而区又是由连续存储的数据块(数据块是 extent 的
组成单位)所组成的。块是 Oracle 存储和数据操作的最小单位。
表空间物理上是由一个或多个数据文件(数据文件是表空间物理存储的载体)组成的。
1、逻辑存储层次结构
每个段属于且仅属于一个表空间。因此,一个段的所有扩展区存储在相同的表空间中。在一个
表空间中,一个段可以包括多个数据文件中的扩展区。例如,段的一个扩展区可能存储在
users01.dbf 中,而另一个存储在 users02.dbf 中。单个扩展区绝不会跨越多个数据文件,扩展
区是一组逻辑上连续的数据块。在最细的粒度级别, Oracle 数据库将数据存储在数据块,数据块
是 Oracle 数据库可以使用或分配的最小存储单位。
下图显示了表空间中的数据块、 扩展区、和段之间的关系,一个段分别存储在不同数据文件
中的两个扩展区。24 KB 的扩展区有 12 个数据块,而 72 KB 的扩展区有 36 个数据块。
2、逻辑空间管理
Oracle 数据库必须使用逻辑空间管理来在表空间中跟踪并分配扩展区。当数据库对象需要扩
展区时,该数据库必须有查找和分配扩展区的方法。同样,当对象不再需要扩展区时,数据库必须
提供一种方法来重用可用空间。
Oracle 数据库基于创建的表空间的类型来管理其中的空间。可以创建下列类型的表空间:
本地管理表空间 (默认值):数据库使用表空间本身中的位图来管理扩展区。因此,本地
管理表空间需要预留表空间的一部分用于位图。在一个表空间中,数据库可以使用自动段
空间管理 (ASSM) 或手动段空间管理 (MSSM)来管理段 。
字典管理表空间:使用数据字典来管理其扩展区。每当分配或释放了一个扩展区时,Oracle 数
据库更新数据字典中的表。例如,当表需要扩展区时,数据库查询数据字典表,并搜索空闲扩展区。
如果数据库找到了空间,则修改一个数据字典表,并插入一行。按这种方式,数据库通过修改和移
动数据来管理空间。
数据库在后台为数据库对象获取空间而执行的 SQL 是递归 SQL。频繁使用递归 SQL 可能会对
性能有负面影响,因为必须串行化对数据字典的更新。而默认的本地管理表空间避免了这种性能问
题。
图 逻辑空间管理
本地管理表空间在数据文件头中维护一个位图,以跟踪数据文件中的可用空间和已用空间。每
一位对应一组块。当空间被分配或释放时,Oracle 数据库更改位图值,以反映数据块的新状态。
下图是位图管理存储的概念表示。标头中的 1 是指已用空间,而 0 指可用空间。
本地管理表空间具有如下优势:
避免使用数据字典来管理扩展区
消耗或释放一个扩展区会导致在数据字典表或撤消段中消耗或释放空间,则在字典管理的表空
间中会发生递归操作。
自动跟踪相邻的可用空间:通过这种方式,数据库消除了合并空闲扩展区的需要。
自动确定本地管理扩展区的大小,或者,在本地管理表空间中所有的扩展区可以具有相同
的大小,并覆盖对象存储选项。
建议:Oracle 强烈建议使用自动段空间管理的本地管理表空间
段空间管理:在一个本地管理表空间中,数据库可以自动地或手动地管理段。例如,users 表空间
中的段使用自动管理,而 tools 表空间中的段使用手动管理。
自动段空间管理(ASSM):ASSM 方法使用位图管理空间。ASSM 更有效,并且是永久性本地
管理表空间的默认值。位图提供了以下优点:
简化管理
ASSM 可以避免手动确定许多存储参数的正确设置的需要。只有一个很关键的控制空间分配
的 SQL 参数: PCTFREE。此参数指定要为块中保留用于将来的更新的空间百分比。
增强并发性
多个事务可以搜索多个相互独立的空闲数据块列表,从而减少争用和等待。
6
手动段空间管理(MSSM)
MSSM 方法使用称为空闲列表的链表来管理段中的可用空间。对一个具有可用空间的数据库对
象,有一个空闲列表会跟踪位于高水位线 (HWM) 之下的数据块,所谓高水位,即已使用段空间和
未使用段空间之间的分界线。当块被使用时,数据库根据需要将块放入空闲列表,或将块从空闲列
表中删除。
除了 PCTFREE,MSSM 需要您使用额外的几个 SQL 参数(如 PCTUSED、FREELISTS、和 FREELIST
GROUPS)来控制空间分配。PCTUSED 设置在当前使用块中必须存在的可用空间百分比,当使用率低
于该百分比时,数据库会将其放入空闲列表中。例如,如果 CREATE TABLE 语句中设置 PCTUSED
为 40,则只有当块空间使用少于 40%的情况下,您才能往段中的块插入新行。
假设向一个表中插入行。数据库检查该表的空闲列表,以查找第一个可用的块。如果行无法容
纳进该块中,并在块中已使用空间大于或等于 PCTUSED,则数据库将该块从空闲列表中移除,并搜
索另一个块。如果从块中删除行,则数据库检查块中的已使用空间现在是否小于 PCTUSED。如果是,
则数据库将该块置于空闲列表的开头。
一个对象可能有多个空闲列表。通过这种方式,在表上执行 DML 的多个会话可以使用不同列表,
以减少争用。每个数据库会话在其会话持续时间只使用一个空闲列表。
也可以创建具有一个或多个空闲列表组的对象,空闲列表组是空闲列表的集合。每个组有一个
主空闲列表,用于管理组中的各个空闲列表。空闲列表、尤其是空闲列表组的空间开销,可能非常
显著。
剩余36页未读,继续阅读
资源评论
CodeGolang
- 粉丝: 56
- 资源: 1090
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功