您现在的位置: 骇客基地 >> 黑客文章 >> 黑客攻防 >> 黑客教程 >> 正文

ASSM内部存储研究大揭密
骇客基地 阅读: 时间:2007-6-22 9:35:58 来源:www.hookbase.com
  

因为资料有限,如果有错误,请大家指正
  
为了进一步让大家明白ASSM,先说明ASSM的基本情况!  
-----------------------------------------------------------------------------------------------------  
在920以前,表的剩余空间的管理与分配都是由链接列表freelist来完成的,因为freelist存在串行的问题因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA 花费大量的精力去管理这些争用并监控表的空间利用。  
自动段空间管理(ASSM),它首次出现在Oracle920里。有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。  
让我们看看位图freelist是如何实现的。我会从使用区段空间管理自动参数创建tablespace开始:  
create tablespace demo  
datafile '/ora01/oem/demo01.dbf '  
size 5m  
EXTENT MANAGEMENT LOCAL -- Turn on LMT  
SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM;  
一旦你定义好了tablespace,那么表和索引就能够使用各种方法很容易地被移动到新的tablespace里,带有ASSM的本地管理tablespace会略掉任何为PCTUSED、NEXT和FREELISTS所指定的值。  
当表格或者索引被分配到这个tablespace以后,用于独立对象的PCTUSED的值会被忽略,而Oracle9i会使用位图数组来自动地管理tablespace里表格和索引的freelist。对于在LMT的tablespace内部创建的表格和索引而言,这个NEXT扩展子句是过时的,因为由本地管理的tablespace会管理它们。但是,INITIAL参数仍然是需要的,因为Oracle不可能提前知道初始表格加载的大小。对于ASSM而言,INITIAL最小的值是三个块。  
新的管理机制用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和<25%,也就是说位图其实采用了四个状态位来代替以前的pctused,什么时候该利用该数据块则由设定的pctfree来确定。  
使用ASSM的一个巨大优势是,位图freelist肯定能够减轻缓冲区忙等待(buffer busy wait)的负担,这个问题在Oracle9i以前的版本里曾是一个严重的问题  
在没有多个freelist的时候,每个Oracle表格和索引在表格的头部都曾有一个数据块,用来管理对象所使用的剩余区块,并为任何SQL插入声明所创建的新数据行提供数据块。当数据缓冲内的数据块由于被另一个DML事务处理锁定而无法使用的时候,缓冲区忙等待就会发生。当你需要将多个任务插入到同一个表格里的时候,这些任务就被强制等待,而同时Oracle会在同时分派剩余的区块,一次一个。  
有了ASSM之后,Oracle宣称显著地提高了DML并发操作的性能,因为(同一个)位图的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据Oracle的测试结果,使用位图freelist会消除所有分段头部(对资源)的争夺,还能获得超快的并发插入操作  
尽管ASSM显示出了令人激动的特性并能够简化Oracle DBA的工作,但是Oracle9i的位图分段管理还是有一些局限性的:  
· 一旦DBA被分配之后,它就无法控制tablespace内部的独立表格和索引的存储行为。  
· 大型对象不能够使用ASSM,而且必须为包含有LOB数据类型的表格创建分离的tablespace。  
· 你不能够使用ASSM创建临时的tablespace。这是由排序时临时分段的短暂特性所决定的。  
· 只有本地管理的tablespace才能够使用位图分段管理。  
· 使用超高容量的DML(例如INSERT、UPDATE和DELETE等)的时候可能会出现性能上的问题。
ASSM到底是怎么回事,表是怎么结构的呢?  
----------------------------------------------------------------------------------  
关键字:ASSM,自动段管理  
BMB Segment 位图块段管理  
  
1、我们先创建一个本地管理的表空间,采用段自动管理方式  
create tablespace demo  
datafile '/ora01/oem/demo01.dbf '  
size 50m  
EXTENT MANAGEMENT LOCAL          --一定是本地管理  
SEGMENT SPACE MANAGEMENT AUTO;  --ASSM管理的标志
  
  
2、创建同样一个表  
SQL> create table demotab ( x number ) tablespace demo  
storage (initial 1000K);  
Table created
  
我们指定初试区间大小是1000K
  
SQL> select t.table_name,t.initial_extent,t.next_extent,t.pct_free,t.pct_used from user_tables t where t.table_name = 'DEMOTAB';  
TABLE_NAME INITIAL_EXTENT NEXT_EXTENT PCT_FREE PCT_USED  
------------------------------ -------------- ----------- ---------- ----------  
DEMOTAB                  1024000                    10
  
可以看到,NEXT_EXTENT与PCT_USED都为空。  
  
3、执行该过程,检查表的初始状态  
SQL> exec show_space('demotab');  
Total Blocks............................128  
Total Bytes.............................1048576  
Unused Blocks...........................125  
Unused Bytes............................1024000  
Last Used Ext FileId....................7  
Last Used Ext BlockId...................8  
Last Used Block.........................3  
  
从这里我们能看到一些该表的特性,其中最引人注意的就是表头了,占用了三个块的大小(128-125)  
另外一个注意的地方就是该表从第8个块开始,但是实际上这里是错误的,应当是从第9个块开始,文件头占用了64K的空间等于8个块。  
我们从dba_extent中也能看到这样的信息,实际上是从第9个块开始的。
  
SQL> select t.segment_name,t.extent_id,t.block_id from dba_extents t where t.segment_name = 'DEMOTAB';  
SEGMENT_NAME EXTENT_ID BLOCK_ID  
-------------------------------------------------------------------------------- ---------- ----------  
DEMOTAB 0 9  
DEMOTAB 1 17  
……
  
从这里可以看到,第一个区间的开始块是9
  
4、我直接开始分析第9,10,11个块(段头)  
SQL> alter system dump datafile 7 block 9;  
System altered  
SQL> alter system dump datafile 7 block 10;  
System altered  
SQL> alter system dump datafile 7 block 11;  
System altered
  
  
Start dump data blocks tsn: 6 file#: 7 minblk 9 maxblk 9  
buffer tsn: 6 rdba: 0x06800009 (7/9)  
scn: 0x0000.00181a2c seq: 0x01 flg: 0x04 tail: 0x1a2c2001  
frmt: 0x02 chkval: 0x30a6 type: 0x20=FIRST LEVEL BITMAP BLOCK  
Dump of First Level Bitmap Block  
--------------------------------  
nbits : 4 nranges: 2 parent dba: 0x0680000a poffset: 0  
unformatted: 13 total: 16 first useful block: 3   
owning instance : 1  
instance ownership changed at  
Last successful Search  
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0  
  
Extent Map Block Offset: 4294967295  
First free datablock : 3  
Bitmap block lock opcode 0  
Locker xid: : 0x0000.000.00000000  
Highwater:: 0x0680000c ext#: 0 blk#: 3 ext size: 8  
#blocks in seg. hdr's freelists: 0  
#blocks below: 0  
mapblk 0x00000000 offset: 0  
HWM Flag: HWM Set  
--------------------------------------------------------  
DBA Ranges :  
--------------------------------------------------------  
0x06800009 Length: 8 Offset: 0  
0x06800011 Length: 8 Offset: 8  
  
0:Metadata 1:Metadata 2:Metadata 3:unformatted  
4:unformatted 5:unformatted 6:unformatted 7:unformatted  
8:unformatted 9:unformatted 10:unformatted 11:unformatted  
12:unformatted 13:unformatted 14:unformatted 15:unformatted
  
--------------------------------------------------------  
End dump data blocks tsn: 6 file#: 7 minblk 9 maxblk 9  
  
Start dump data blocks tsn: 6 file#: 7 minblk 10 maxblk 10  
buffer tsn: 6 rdba: 0x0680000a (7/10)  
scn: 0x0000.00181a39 seq: 0x01 flg: 0x04 tail: 0x1a392101  
frmt: 0x02 chkval: 0x2738 type: 0x21=SECOND LEVEL BITMAP BLOCK  
Dump of Second Level Bitmap Block  
number: 8 nfree: 8 ffree: 0 pdba: 0x0680000b  
opcode:0  
xid:  
L1 Ranges :  
--------------------------------------------------------  
0x06800009 Free: 5 Inst: 1  
0x06800019 Free: 5 Inst: 1  
0x06800029 Free: 5 Inst: 1  
0x06800039 Free: 5 Inst: 1  
0x06800049 Free: 5 Inst: 1  
0x06800059 Free: 5 Inst: 1  
0x06800069 Free: 5 Inst: 1  
0x06800079 Free: 5 Inst: 1
  
  
--------------------------------------------------------  
End dump data blocks tsn: 6 file#: 7 minblk 10 maxblk 10  
  
Start dump data blocks tsn: 6 file#: 7 minblk 11 maxblk 11  
buffer tsn: 6 rdba: 0x0680000b (7/11)  
scn: 0x0000.00181a3d seq: 0x01 flg: 0x04 tail: 0x1a3d2301  
frmt: 0x02 chkval: 0x4904 type: 0x23=PAGETABLE SEGMENT HEADER  
Extent Control Header  
-----------------------------------------------------------------  
Extent Header:: spare1: 0 spare2: 0 #extents: 16 #blocks: 128  
last map 0x00000000 #maps: 0 offset: 2716  
Highwater:: 0x0680000c ext#: 0 blk#: 3 ext size: 8  
#blocks in seg. hdr's freelists: 0  
#blocks below: 0  
mapblk 0x00000000 offset: 0  
Unlocked  
--------------------------------------------------------  
Low HighWater Mark :  
Highwater:: 0x0680000c ext#: 0 blk#: 3 ext size: 8  
#blocks in seg. hdr's freelists: 0  
#blocks below: 0  
mapblk 0x00000000 offset: 0  
Level 1 BMB for High HWM block: 0x06800009  
Level 1 BMB for Low HWM block: 0x06800009  
--------------------------------------------------------  
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0  
L2 Array start offset: 0x00001434  
First Level 3 BMB: 0x00000000  
L2 Hint for inserts: 0x0680000a  
Last Level 1 BMB: 0x06800079  
Last Level II BMB: 0x0680000a  
Last Level III BMB: 0x00000000
  
Map Header:: next 0x00000000 #extents: 16 obj#: 29929 flag: 0x20000000  
Extent Map  
-----------------------------------------------------------------  
0x06800009 length: 8  
0x06800011 length: 8  
0x06800019 length: 8  
0x06800021 length: 8  
0x068

[1] [2] [3] [4] 下一页

今天广告
参与评论:
注意事项:
【ASSM内部存储研究大揭密】文章由骇客基地网上搜集,其立场行为并不代表本站。
如果您发现该文章若无意中侵犯到您的权利,请联系我们!
未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自本站,谢谢您的支持!
最近更新
最新推荐
     
 
黑客首页 | 服务指南 | 软件发布  | 关于我们 | 本站声明  | 隐私声明 | 诚征英才 | 网站地图 | 友情链接 |
 
 
中国·黑客·骇客·基地 请使用IE6.0版本, 分辩率1024×768进行浏览 www.hookbase.com 站长:利客 Email:hookbase@163.com
Copyright © 2004-2009 All Rights Reserved. 粤ICP备05000985号