ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 2.3 数据扩展的概述

2.3 数据扩展的概述

原创 Linux操作系统 作者:封烨 时间:2010-11-26 11:00:00 0 删除 编辑
数据扩展(extent)是由一组连续的数据块(data block)构成的数据库逻辑存储分配单元。而段(segment)则是由一个或多个数据扩展构成。当一个段中已有空间已经用完,oracle为这个段分配新的数据扩展。
2.3.1数据扩展何时被分配
     当用户创建数据表时,oracle就自动为此表的数据段分配包含一个或若干个数据块的初始数据扩展。如果一个段(segment)的初始数据扩展(initial extent)中的数据块(data block)都已装满,且有新数据插入需要空间时,oracle自动为这个段分配一个增量数据扩展(incremental extent)。增量数据扩展是一个段中继已有数据扩展之后分配的后续数据扩展,它的容量>=之前的数据扩展。这种分配只适用于串行(serial operation)的情况,即只有一个服务进程解析,执行sql语句。对于并行执行(parallel)的SQL语句,即一个语句由多个服务进程执行,数据扩展的分配情况有所不同。
2.3.2 如何决定数据扩展分配时的数量与容量
     每个段的定义中都包含了数据扩展的存储参数。这个参数控制着oracle如何分配可用空间。用户既可以使用数据字典管理的表空间,也可以使用本地管理的表空间。当用户没有显式的设定数据扩展的管理参数时,除system之外的所有永久表空间默认使用本地管理方式。
     在一个本地管理的表空间中,分配的数据扩展的容量既可以是用户设定的固定值,也可以是由系统自动决定的可变值。
     用户创建表空间时,可以使用uniform或autoallocate子句设定数据扩展的分配方式;创建表时,可以使用storage子句设定存储参数。
     对于用户设定的数据扩展,默认容量是1MB,用户自己分配时,需要确保容量至少能包含5个数据块。本地管理的临时表空间在分配数据扩展时只能使用这种方式。
     对于由系统管理的数据扩展,由oracle决定新增数据扩展的最佳容量。最少为64KB。如果使用了segment space managment aoto子句,切数据块容量>=16KB,则oracle为其分配的数据扩展最小容量为1MB。
2.3.3 数据扩展如何被分配
     对于本地管理的表空间:oracle在为新的数据扩展寻找可用空间时,首先选择一个属于此表空间的数据文件,再搜索此数据文件的位图查找连续的数据块。如果此数据块中没有足够的连续可用空间,oracle将查询其他数据文件。
     oracle强烈建议用户使用本地管理的表空间。
2.3.4 数据扩展如何被回收
     oracle提供了Segment Advisor工具,它根据方案对象存储空间中的碎片程度来判断此对象中是否包含可回收的空间。
     用户将一个段对应的方案对象移除(使用drop table or drop cluster),则数据扩展将被回收到表空间。
     表,簇表的所有者或者拥有delete any权限的用户,可以使用truncate , drop storage语句将表,簇表的数据删除。
     DBA可以使用alter table table_name deallocate unused删除数据 扩展。
     如果用户为回滚段设定了optimal参数,oracle将周期性的从其中回收数据扩展。
     当数据扩展被释放后,oracle将修改数据文件中的位图(本地管理模式)或者更新数据字典(数据字典管理模式),将回收的数据扩展视为可用。被释放的数据扩展中的数据将无法继续访问。
2.3.4.1 非簇表中的数据扩展
     只要用户没有drop or truncate非簇表,则数据段内任何数据块都不会被回收,即使用户delete了表的所有行。否则,当用户drop了一个非簇表,oracle则在需要空间时回收此表对应的数据扩展。(将数据段,索引段的数据扩展全部收回)
     对于数据字典管理的表空间,当一个段需要的数据扩展比现有的可用扩展都大时,oracle则会通过数据扩展合并来形成更大的数据扩展空间。而本地管理的表空间则无需关心空间是如何被回收的。
2.3.4.2 簇表中的数据扩展
     当用户drop簇中的一个表时,没有数据扩展被回收,因为数据段还要为簇中的其他表保留。只有清空这个簇才能回收属于该簇的数据扩展。
2.3.4.3 物化视图及其日志的数据扩展
     oracle回收属于物化视图及其日志的数据扩展方式与表或簇相同。
2.3.4.4 索引的数据扩展
     只要索引存在,则对应索引段的所有数据扩展都不会被回收。当用户drop索引或相关的表,簇表时,oracle才会将索引使用的数据扩展回收。
2.3.4.5 临时段的数据扩展
     当一个事务,或会话,或一个SQL执行完成,且在执行过程中使用了临时段,oracle则自动移除临时段,并将属于此段的数据扩展还给临时段所在的表空间。
     当用户执行单一排序时,oracle将在此用户的临时表空间中创建为这个排序服务的临时段,并在执行后将此段数据扩展回收。
     当用户执行多重排序,则可能会使用到临时表空间中专门为排序而创建的排序段。在每个实例中只会分配一个排序段,在排序操作使用后也不会被回收,而是继续供以后的多重排序使用。
2.3.4.6 回滚段的数据扩展
     oracle将周期性的检查数据回滚段的容量是否超过了最优值。如果超过,oracle将自动从回滚段中回收一些数据扩展。

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

下一篇: 2.2数据块概述
请登录后发表评论 登录
全部评论

注册时间:2010-11-26

  • 博文量
    43
  • 访问量
    104758