oracle空间管理-区段管理信息

文章转自 (oracle内核技术揭秘)一书

1 每个数据文件的前8个或者128个 local extent management管理区,即为数据文件头信息(包含检查点scn,数据文件大小,绝对文件号和相对文件号等元数据)。

select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from t1 where rownum<100;

2 每个数据段的段头位存有freelist(MSSM)或者l3 l2 l1块。

3 HW每次像后边移动,都是以L1为单位移动。(数据块大小为8kb,extent大小为1Mb,则L1中包含64个数据块)

2 区 

段 。

堆表无序快速插入。

对于MSSM依然在段头存储freelist列表,使用pctfree和pctuse参数控制像哪个数据块插入。

对于ASSM整体的结构是3层位图块+数据块的模式即4层树形结构。(保留pctfree)

第一层位图结构成为L3,一个L3块中包含多个L2块地址,一个L2块包含多个L3块地址,一个L1块存放多个数据块地址。

第一个L3一般为段头块,如果段头中存放太多的L2块信息,空间不足 ,oracle会在分配第2个L3块,当然段头会记录第2个L3块的地址。如果第2分L3块也用完了 ,则分配第3个L3块,第2个记录第3个的地址。

ORACLE如何使用4层结构插入数据

1 查找数据字典,dba_segment确定段头位置。

2 在段头块中找到第一个L2块位置信息。

3 到L2块中根据插入进程的pid进行hash运算得到一个随机数N,在L2中找到第N个L1块位置信息。

4 到第3不确定的L1中,在根据进程的pid在进行hash运算得到一个随机数M,在L1中找到第M号数据块,

5 向M号数据块中插入数据。

经典案例 1 MSSM-buffer busy waits

1个L3选择第一个L2,L2随机选择L1,为啥选择L1就固定选择第一个拿 ,HWM,

ORACLE只使用了第一个L1中的数据块,而没有使用第2个L1中的数块。

ORACLE高水位点事根据L1块记录数据块数量为单位向后移动。

8kb,1M区一个L1包含64个块。

段 头与extent map

段头是第一个L3块,就是说段头包含L3信息,其实段头的重要信息除了包括L3块外,还有Extent map,就是区地图。

区地图就是记录段中所有区都在哪的地图。全表扫描就是按图查询,逐个读取。

模拟全表扫描流程。

1 确定段头位置

SQL> select header_file,header_block from dba_segments where segment_name='T1';

HEADER_FILE HEADER_BLOCK
----------- ------------
 10        15850

SQL> alter system dump datafile 10 block 12850;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值