首页 > Linux操作系统 > Linux操作系统 > 数据表创建参数介绍(三)
PART2、存储结构相关参数
在storage关键字里,包括了存储上对数据对象空间分配的一些重要参数。其中的核心内容控制了Oracle如何给这个数据表对象分配空间。
在这里,我们需要说明一下数据表空间Tablespace空间管理的机制问题。storage关键字里面涉及到参数取值通常来自我们使用表空间的设置。数据表逻辑上是一种段对象segment object(Data Segment)。Data Segment的空间管理是通过Tablespace表空间进行管理的。
在管理空闲空间和分配空间的问题上,有字典管理方式(Dictionary Management Tablespace DMT)和本地管理方式(Locally Management Tablespace LMT)。(声明:本部分参考陈吉平老师的《Oracle——高可用环境》)
在Oracle8i以前,对空闲空间是采用数据字典DML的方式进行管理。两个底层数据字典UET$(已经使用过的空间)和FET$(未使用的空间)。当分配空间的时候,Oracle使用一系列递归的SQL来获取空闲空间。这种结构存在一些潜藏的问题。
首先是并行操作引起的性能瓶颈。在寻找空间空间和分配空间的时候,Oracle对两个数据字典表进行递归SQL调用和更新。在DML操作频繁、空间分配管理的环境下,数据字典进行串行化操作,容易形成性能瓶颈。
第二、配合其他参数进行空间分配,容易形成过多的空间碎片。特别是在分配大小不一致的情况下。
最后,每个Segment所使用的所有extents信息都保存在数据字典中,如果数据表很大,字典数据表中记录数目也就相对较多。那么,进行批量的删除或者数据表drop,会引起长时间的数据表更新操作。长时间的串行化更新操作进一步就会影响系统整体的空间管理分配能力。
鉴于这些问题,Oracle在8i之后,推出了本地管理表空间(LMT)机制,逐渐取代DMT方法。简单的说,就是将空闲空间管理职责,由统一的数据字典管理下放到文件级别,让文件自己管理空闲空间、分配空间。
在LMT机制里,Oracle将存储信息保存在文件的文件头部。在文件头上,存在一个位图形式的存储信息段,其中记录了该文件空闲空间管理信息。这样,在表空间进行对象空间分配的时候,只需要进行文件级别的资源协调,不需要访问专门的数据字典。这样也就避免了空闲资源带来的争用。
简单介绍完DMT和LMT,我们回到storage参数设置上。
ü initial参数
initial参数的含义是在创建这个对象(数据表)时,分配多大的空间。也就是初始段segment大小。
在我们提取出的数据表信息中,initial参数设置为65536。系统的块为8K,也就是8*1024=8192byte空间。initial为8*8K,也就是说,初始段空间分配8个数据块,也就是64KB。
虽然initial参数是DMT时代确定的参数选项,但是在LMT机制下该参数依然有效,而且是必需的。Oracle是不能确定初始段空间大小。
ü NEXT参数
在LMT进行表空间管理下,NEXT参数子句是过时的。NEXT表示分配下一个空间片段的大小。在我们这个代码例子中,next=1048576,为1MB空间。
为了消除存储中的碎片现象,目前我们都是通过设置统一大小uniform. size的extent空间。也就是每个分区的大小都是一致的。
ü Minextents和Maxextents参数
这两个参数的作用是比较明显。数据对象在创建开始分配分区的个数和最大可分配分区的个数信息。
SQL> create table t (id number);
Table created
SQL> select bytes, blocks, extents, min_extents, max_extents from user_segments where segment_name='T';
BYTES BLOCKS EXTENTS MIN_EXTENTS MAX_EXTENTS
---------- ---------- ---------- ----------- -----------
65536 8 1 1 2147483645
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-688507/ ,如需转载,请注明出处,否则将追究法律责任。