Oracle逻辑空间管理

整理自Oracle 11g R2 官方文档《concepts》
001
    Oracle 数据库必须使用逻辑空间管理在表空间中跟踪并分配扩展区数据库对象需要扩展区时,该数据库必须有查找和分配扩展区的方法。样,当对象不再需要扩展区时,数据库必须提供一种方法来重用可用空间。
    Oracle 数据库基于您创建的表空间的类型来管理其中的空间。您可以创建下列类型的表空间之一:
        ·本地管理表空间 (默认值)
    数据库使用表空间本身中的位图来管理扩展区。因此,本地管理表空间需要预留表空间的一部分用于位图。在一个表空间中,数据库可以使用自动段空间管理(ASSM)或手动段空间管理(MSSM)来管理段。
        ·字典管理表空间
    数据库使用数据字典来管理扩展区

图 12-3 显示了一个表空间中的逻辑空间管理方法的可选方案。
Oracle逻辑空间管理

002 本地管理表空间
    本地管理表空间在数据文件头维护一个位图,以跟踪数据文件中的可用空间和已用空间。每一位对应一组块。当空间被分配或释放时,Oracle 据库更改位图值,以反映数据块的新状态。下面的图形是位图管理存储的概念表示。标头中的1是指已用空间,而0指可用空间。
Oracle逻辑空间管理

本地管理表空间具有如下优势:
·避免使用数据字典来管理扩展区
    如果消耗或释放一个扩展区会导致在数据字典表或撤消段中消耗或释放空间,则在字典管理的表空间中会发生递归操作。
·自动跟踪相邻的可用空间
    通过这种方式,数据库消除了合并空闲扩展区的需要。
·自动确定本地管理扩展区的大小
    或者,在本地管理表空间中所有的扩展区可以具有相同的大小,并覆盖对象存储选项。
 注意:Oracle 强烈建议使用自动段空间管理的本地管理表空间。

003 段空间管理
    段空间管理是一个从包含该段的表空间继承来的属性在一个本地管理表空间中,数据库可以自动地或手动地管理段。例如,users 表空间中的段使用自动管理,而 tools 表空间中的段使用手动管理。
3-1 自动段空间管理(ASSM,automatic segment space management)
    ASSM 方法使用位图管理空间。位图提供了以下优点:
    ·简化管理
    ASSM 可以避免手动确定许多存储参数的正确设置的需要。只有一个很关键的控制空间分配的SQL 参数:PCTFREE。此参数指定要为块中保留用于将来的更新的空间百分比
    ·增强并发性
 多个事务可以搜索多个相互独立的空闲数据块列表,从而减少争用和等待。对很多标准工作负载,使用 ASSM 的应用程序性能比使用优化得很好的使用 MSSM 的应用程序性能更好。
    ·Oracle 真正应用集群(Oracle RAC)环境中实例的空间动态亲合
    ASSM 更有效,并且是永久性本地管理表空间的默认值。
3-2 手动段空间管理(MSSM,manual segment space management)
    旧式的MSSM 方法使用称为空闲列表的链表来管理段中的可用空间对一个具有可用空间的数据库对象,有一个空闲列表会跟踪位于高水位线 (HWM) 之下的数据块所谓高水位,即已使用段空间和未使用段空间之间的分界线。当块被使用时,数据库根据需要将块放入空闲列表,或将块从空闲列表中删除。
    除了PCTFREEMSSM 需要您使用额外的几个SQL 参数(如 PCTUSEDFREELISTS、和FREELIST GROUPS)来控制空间分配。PCTUSED置在当前使用块中必须存在的可用空间百分比当使用率低于该百分比时,数据库会将其放入空闲列表中。例如,如果CREATE TABLE 语句中设置PCTUSED40,则只有当块空间使用少于40%的情况下, 您才能往段中的块插入新行。
    作为一个说明,假设向一个表中插入行。数据库检查该表的空闲列表,以查找第一个可用的块。如果行无法容纳进该块中,并在块中已使用空间大于或等于PCTUSED,则数据库将该块从空闲列表中移除,并搜索另一个块。如果从块中删除行,则数据库检查块中的已使用空间现在是否小于 PCTUSED。如果是,则数据库将该块置于空闲列表的开头。
    一个对象可能有多个空闲列表。通过这种方式,在表上执行DML 的多个会话可以使用不同列表,以减少争用。每个数据库会话在其会话持续时间只使用一个空闲列表。
    如图12-4 所示,你也可以创建具有一个或多个空闲列表组的对象,空闲列表组是空闲列表的集合。每个组有一个主空闲列表,用于管理组中的各个的处理空闲列表。空闲列表、尤其是空闲列表组的空间开销,可能非常显著。
Oracle逻辑空间管理
    手动管理段空间可能会很复杂。您必须调整PCTFREE PCTUSED,以减少行迁移和避免空间浪费。例如,如果段中的每个使用的块是半满,并且PCTUSED 40,则数据库不允许向这些块插入新行。由于微调空间分配参数很困难,Oracle 强烈建议使用ASSM。在ASSM中,由PCTFREE 确定是否可以将新行插入一个块中,但它不使用空闲列表,并忽略PCTUSED

004 字典管理表空间
    字典管理表空间使用数据字典来管理其扩展区。每当分配或释放了一个扩展区时,Oracle 数据库更新数据字典中的表。例如,当表需要扩展区时,数据库查询数据字典表,并搜索空闲扩展区。如果数据库找到了空间,则修改一个数据字典表,并插入一行。按这种方式,数据库通过修改和移动数据来管理空间。
    数据库在后台为数据库对象获取空间而执行的SQL 是递归SQL。频繁使用递归SQL 可能会对性能有负面影响,因为必须串行化对数据字典的更新。而默认的本地管理表空间避免了这种性能问题。
上一篇:Qt中用正則表達式来推断Text的语种,主要通过推断unicode的编码范围


下一篇:项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】