表空间Tablespace是Oracle数据库逻辑结构中的一个层次。创建管理表空间和对应的数据文件,是DBA的一项重要工作内容。本篇从不同的表空间特性谈起,说明使用的参数特性。
下面是一个使用命令行创建表空间的实例。
SQL> create tablespace tradway datafile '/u01/oradata/WILSON/datafile/trad.dbf' size 100m autoextend off extent management local uniform. size 1m segment space management manual;
Tablespace created
对应数据字典的信息为:
SQL> select tablespace_name, extent_management, allocation_type,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT
------------------------------ ----------------- --------------- ------------------------
(篇幅原因,有省略……)
TRADWAY LOCAL UNIFORM MANUAL
9 rows selected
在使用命令行创建表空间Tablespace的过程中,包括几个方面的参数。
ü 数据文件参数:包括表空间对应数据文件名称,初始大小和可变化规则;
ü Extent(分区)分配规则方案:表空间对segment对象进行增加空间分配的时候,使用的分配方法和策略;
ü Segment(段)对象管理方式:分为自动段对象管理或者手动段对象管理;
下面分别进行介绍:
1、数据文件Datafile参数
表空间是“表、段、区、块”Oracle四层逻辑结构中唯一与特定物理文件对应的层次。一个表空间可以对应不同硬盘上的多个文件,而一个文件只能属于一个表空间。
在建立表空间的时候,都会生成至少一个数据文件作为表空间信息保存的地方。如果在Create tablespace时没有进行指定datafile字句,那么Oracle会自动依据OMF的方式创建出一个数据文件。
指定数据文件的字句是使用datafile作为关键字,后面内容包括文件路径、初始大小、拓展方式和每次增加空间大小。
SQL> create tablespace test datafile 'd:\oradata\orcl\test.dbf' size 10m autoextend on next 1m maxsize 100m;
Tablespace created
ü size子句:指定生成数据文件的初始大小,默认值通常为100m。对成熟的系统部署移植工作而言,通常是可以确定文件的固定大小。避免经常性的文件膨胀,引起性能变化;
ü autoextend开关与next子句:文件大小变化开关是通过autoextend来实现的。如果设置on,表示该文件允许进行动态拓展,文件写满之后就会以next指定的大小进行拓展。如果设置为off,则该文件不进行拓展;
ü next子句:当文件设置为可拓展时,next为每次进行拓展的步长。如果数据文件是经常大批量的增加,设置一个较大的next值为好;
ü maxsize子句:文件大小上限;
2、extent分区分配方案
表空间Tablespace内部容纳的逻辑结构就是段segment对象。段对象通常是和数据库各个Schema中的对象相关联。表空间空间管理中一个重要方面就是将新的extent分配给segment对象。一个segment会对应一个或者多个extent对象。extent区就是连续的block块集合。
从Oracle发展历程看,extent分配方案有两个阶段。首先出现的是Dictionary Mangage Tablespace,就是数据字典管理方式。数据库中维护一个数据表,每次进行extent分配管理的时候,都要访问该数据表。DMT代表了一个时代,同时也伴随着致命的缺陷。
数据库的一个重要指标就是并行度。一旦出现并行瓶颈,就意味着系统架构存在缺陷。DML就是这样的一个问题,当数据库表空间存在大量的分配请求时,该数据表容易形成瓶颈。于是,DML就被一种新的分配方法Locally Mangage Tablespace(LMT)所取代。
目前的Oracle数据库,都是缺省使用LMT方法的。LMT简单来说,就是利用位图表技术,将分配extent的方法和记录记录在数据文件的文件头上。这样,不同文件的分配压力,就从一个数据表上分散到多个文件上。
目前的Oracle数据库,是可以同时支持LMT和DMT的。但是,新系统一般都会使用LMT。LMT策略下,有存在分配extent大小的问题。
每次进行extent分配的策略,有系统自动和统一大小uniform. size两种方法。
ü automatic allocation自动分配大小。对每个分配extent的大小,由系统自动进行大小判定。这种方式的优点是每次的extent大小比较灵活。但是缺点也是很严重,就是引起大量的存储碎片。
ü uniform. size统一大小。每次分配的extent的大小都是固定的,这样可以很大程度的避免碎片问题。默认uniform. size大小是1M。
3、段segment管理策略
最后介绍表空间创建参数中的segment管理策略。segment对应的通常是一个数据库留存对象信息,如数据段、索引段、回滚段。Segment space management对应的是对segment空间管理的策略,目前有auto和manual两种方式。
ü ASSM(auto)方式:ASSM是代表新趋势的技术,10g中对应的shrink space功能,就是以ASSM技术作为基础,有效减低HWM,避免出现过多的空间浪费。在过去需要设计的pctfree、pctlist等参数,也使用自动化方式进行管理;
ü 手工(Manual)方式:与自动ASSM相对应。与ASSM不同在于每个segment对象都能拥有独立的存储设置参数;
在segment管理策略上,目前一般都选择ASSM策略。但并不意味着ASSM是万能的,还存在一些局限。
4、结论
表空间创建参数涉及多种方案子句,带有不同的含义和特点。