li
  当前位置:主页 > 性能优化 > 文章内容
li
oracle ASSM内部存储研究大揭密(2)
来源: www.itpub.net  作者: www.itpub.net    时间:2008-04-16   阅读:29  
本文章共25631字,分5页,当前第2页,快速翻页:
 

回复: ASSM内部存储研究大揭密 Copy to clipboard
Posted by: piner
Posted on: 2003-08-22 16:35

ASSM到底是怎么回事,表是怎么结构的呢?
----------------------------------------------------------------------------------
关键字:ASSM,自动段管理
BMB Segment 位图块段管理

1、我们先创建一个本地管理的表空间,采用段自动管理方式
[color=navy]create tablespace demo
datafile '/ora01/oem/demo01.dbf '
size 50m
EXTENT MANAGEMENT LOCAL --一定是本地管理
SEGMENT SPACE MANAGEMENT AUTO; --ASSM管理的标志 [/color]

2、创建同样一个表
[color=navy]SQL> create table demotab ( x number ) tablespace demo
storage (initial 1000K);
Table created [/color]
我们指定初试区间大小是1000K

[color=navy]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 [/color]
可以看到,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

从这里我们能看到一些该表的特性,其中最引人注意的就是表头了,占用了[color=red]三个块的大小(128-125)[/color]
另外一个注意的地方就是该表从第8个块开始,但是实际上这里是错误的,应当是从第9个块开始,文件头占用了64K的空间等于8个块。
我们从dba_extent中也能看到这样的信息,实际上是从第9个块开始的。

[color=navy]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
…… [/color]
从这里可以看到,第一个区间的开始块是9

4、我直接开始分析第9,10,11个块(段头)
[color=navy]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 [/color]

Start dump data blocks tsn: 6 file#: 7 minblk 9 maxblk 9
IXDBA.NET社区论坛
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
[color=red]unformatted: 13 total: 16 first useful block: 3 [/color]
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

[color=red]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 [/color]
--------------------------------------------------------
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 :
--------------------------------------------------------
[color=red]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 [/color]

--------------------------------------------------------
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
[color=red]Highwater:: 0x0680000c[/color] 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 :
[color=red]Highwater:: 0x0680000c [/color] 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
[color=red]Last Level 1 BMB: 0x06800079
Last Level II BMB: 0x0680000a
Last Level III BMB: 0x00000000 [/color]
Map Header:: next 0x00000000 #extents: 16 obj#: 29929 flag: 0x20000000
Extent Map
-----------------------------------------------------------------
0x06800009 length: 8
0x06800011 length: 8
0x06800019 length: 8
0x06800021 length: 8
0x06800029 length: 8
0x06800031 length: 8
0x06800039 length: 8
0x06800041 length: 8
0x06800049 length: 8
0x06800051 length: 8
0x06800059 length: 8
0x06800061 length: 8
0x06800069 length: 8
0x06800071 length: 8
0x06800079 length: 8
0x06800081 length: 8

Auxillary Map
--------------------------------------------------------
[color=red]Extent 0 : L1 dba: 0x06800009 Data dba: 0x0680000c
Extent 1 : L1 dba: 0x06800009 Data dba: 0x06800011
Extent 2 : L1 dba: 0x06800019 Data dba: 0x0680001a
Extent 3 : L1 dba: 0x06800019 Data dba: 0x06800021
Extent 4 : L1 dba: 0x06800029 Data dba: 0x0680002a
Extent 5 : L1 dba: 0x06800029 Data dba: 0x06800031
Extent 6 : L1 dba: 0x06800039 Data dba: 0x0680003a
Extent 7 : L1 dba: 0x06800039 Data dba: 0x06800041
Extent 8 : L1 dba: 0x06800049 Data dba: 0x0680004a
Extent 9 : L1 dba: 0x06800049 Data dba: 0x06800051
Extent 10 : L1 dba: 0x06800059 Data dba: 0x0680005a
Extent 11 : L1 dba: 0x06800059 Data dba: 0x06800061
Extent 12 : L1 dba: 0x06800069 Data dba: 0x0680006a
Extent 13 : L1 dba: 0x06800069 Data dba: 0x06800071
Extent 14 : L1 dba: 0x06800079 Data dba: 0x0680007a
Extent 15 : L1 dba: 0x06800079 Data dba: 0x06800081 [/color]
--------------------------------------------------------

Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x0680000a

End dump data blocks tsn: 6 file#: 7 minblk 11 maxblk 11

从这里,我们能获得什么信息?
这个是很重要的。

分析块9,这个块叫FIRST LEVEL BITMAP BLOCK。我们可以看到,这里保留了[color=red]16个块[/color]的信息(注意,不是16个区间的信息),也就是说,这个段头块,它记录的是块的使用信息,开始16个块中间有3个块是段头(Metadata,再一次证明也3个段头的保留),不能被使用,其它的都是未使用的块(unformatted)还有13个。
问题?为什么这里只保留16个块的信息呢?这需要我们进一步研究(往下看)

分析块10,叫SECOND LEVEL BITMAP BLOCK。这个就比较有意思了,记录了可能出现的类似于块9的块出现的块地址([color=red]叫 BMB DBA[/color])。刚才在上面不是说了吗,块9只能记录16个块的信息,那16个块之后的信息怎么办?BMB段采用了分布的策略,在第25个块的地方,oracle将增加一个新的块用来记录下16个块(等会儿看测试),那么块10记录的就是这些块的地址了,如:
0x06800019 Free: 5 Inst: 1 代表下一个块的地址是19(十六进制),其实是就是十进制的25。那么我们想象,再下一个是25+16=41。应当是十六进制的29,再查看块10的内容,大家可以知道这个块的作用了吧,这个块的地址是随表的增加而增加的。

再看块11,这里就是区间地图了,这里主要记录了表的16个区间的分布地址。可以看到其实在ASSM的表里面,取消了原来的freelist(全部放在段头),其实增加了很多块来管理块的数据,这些块不再分布在块的头部,而是分布在表的内部,每隔16个块(这个数目与不同的环境可能有差别),就有一个块来记录下16个块的数据保留的情况。


阅读更多内容<<上一页 · 1 · 2 · 3 · 4 · 5 · 下一页>>


  上一篇: oracle 9i特性之—在线表格重定义...   下一篇: bitmap index 的一点研究心得
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·oracle 9i特性之—在线表格重定义...
·oracle9i特性之数据库监控系列的...
·再谈ORA-01034 错误的解决办法
·oracle联机日志文件REDO LOGFILE...
·Oracle数据库日志文件深入分析
·ORA-03113:end-of-file on comm...
·ORA-00600:internal error code,...
·oracle 数据库的启动和关闭深入分...
·Oracle的sql*plus使用小结
·ORA-01578:Oracle data block co...
·bitmap index 的一点研究心得
·data guard应用的三种模式
·exp 的奇怪问题
·ora-04031处理过程,欢迎进行讨论
·Oracle Standby数据库专题探讨
·pga浅谈
·关于 cursor_sharing = similar
·关于 v$sysstat 与 v$filestat 中...
·statspack统计内容信息含义详解
·关于EXTENT MANAGEMENT LOCAL UN...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接