表空间的区(extent)管理分DMT(Dictionary Management Tablespace)和LMT(Local Management Tablespace)。Oracle建议使用的是LMT,根据Tom的说法就应该当做没有DMT这么回事情。只考虑LMT的问题,因为DMT在分配和释放extent的时候会频繁访问UET$和FET$2张表,会产生大量的递归SQL,导致Oracle的性能低下。而且DMT容易引起磁盘碎片。除了这些,因为LMT使用的是bitmap进行管理,所以很容易判断2个extent是连续的,但是DMT即使2个extent是连续的,但是如果是作为2个record在FET$表中的,Oracle无法识别他们是连续的。
LMT又分System-Manage和Uniform. Size,2者的区别:前者由Oracle决定分配的extent的大小是多少,而后者是由user参数指定。根据Tom的建议,当你不知道object的大小的时候使用System_manage,当一个segment小于10g的时候选择System_manage。
本实验用来查看System-Manage和Uniform. Size2种表空间的开销区别。
LMT的表空间,当创建了对象,就会有64k的空间用于表空间的管理,这个就是开销。但是如果使用的是Uniform. Size类型的,因为会有参数指定每个extent的大小,比如size=5m,虽然Oracle只会使用64k的空间用于表空间的管理,但是实际上是使用了5M的(可以通过user_extent和dba_extent查询)。
下面进行试验:
首先创建2个表空间,分别是上面说的2种LMT表空间
--System Manage LMT
SYS@10.2.0.5>create tablespace system_man extent management local;
Tablespace created.
--Uniform. Size LMT
SYS@10.2.0.5>create tablespace uniform_man extent management local uniform. size 5m;
Tablespace created.
然后分别在2个表空间上创建对象(一张空的表)
--System Manage LMT
SYS@10.2.0.5>create table system_tab (id int, c char(2000)) tablespace system_man ;
Table created.
--Uniform. Size LMT
SYS@10.2.0.5>create table uniform_tab(id int, c char(2000)) tablespace uniform_man;
Table created.
然后通过user_extent/dba_extent对开销进行查询:
SYS@10.2.0.5>select TABLESPACE_NAME,EXTENT_ID,bytes/1024/1024, blocks from dba_extents where tablespace_name in ('SYSTEM_MAN','UNIFORM_MAN');
TABLESPACE_NAME EXTENT_ID BYTES/1024/1024 BLOCKS
------------------------------ ---------- --------------- ----------
UNIFORM_MAN 0 5 640
SYSTEM_MAN 0 .0625 8
通过上面的查询可以看出,uniform. size的LMT一开始就使用了5M的空间,虽然表现在是空的。但是System Manage的LMT依旧只是使用了64k的空间用于管理。(这里说一开始就使用,更好的说法应该是一下子分配,system manage只分配了64k用于空间管理,而uniform. size的LMT则分配了uniform. size指定的参数大小的空间)
PS:下次的实验依旧是2种类型的LMT的比较,比较的内容是对于多数据文件的表空间,2种LMT的使用数据文件区别。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22035671/viewspace-747862/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22035671/viewspace-747862/