block块结构

本文深入探讨了Oracle块如何映射到系统全局区(SGA),以及缓存层级包括缓存头部(the cachelayer)、事务层(the transactionlayer)和数据层(the datalayer)的具体结构和功能。详细解析了DBA、块类型、块格式、系统更改号等关键属性,以及事务固定头部和变量头部的内容,最后介绍了数据层的数据头部(KDBH)和行数据的存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracleblock被映射到SGA kcbhkernel cache block header)的对应的block



the cache layer
:它是block header的第一部分,占用20bytes。用于检查数据的正确性,即被读的block是否断裂或损坏。它包含如下结构



1.       the data block address
DBA

2.       the block type (
例如Table/Index, Rollback Segment, Temporary)

3.       the block format
8i~9i 都是0x02 10.1.0 2k: 0x62 4k:0x82 8k:0xa2 16k:0xc2 (logfile 0x22 512  bytes)



4.       a system change number
SCNused for ordering purposes during recovery



the transaction layer:
用户存储数据块里transaction信息的,包含两部分信息


1.      
一个是a fixed component ,KTBBH(TRANSACTION FIXED HEADER),包含关于数据块的类型,数据块的最cleanout时间,ITLInterested Transcation List)的数量,空闲列表的链接,还有空闲空间lock


2.      
另一个是 a variable portionKTBITTRANSACTION VARIABLE HEADER),包含一个进程在一个block里要编辑行所需要的ITLs。默认的包含一个表的数据块只有一个ITLITL的多少是通过存储参数INITRANS来设置的,设置较大的值会减少row data的可用空间,这个参数是可以动态修改的,但只影响新的block,对已经存在的block没有作用(可以用imp/exp,move等方法可以让其对存在的block起作用)



The data layer
:包含data header 结构,KDBHkernel data block header,是DATA HEADER,占用14bytes),和row data。其中data header包含表的数量(在表索引中,即table directory),数据行的数量,第一个空闲行的条目(在行索引中,即row directory),指向空闲区域的开始和结束的偏移量,可用的空闲空间。数据行是从block的底部开始insert的,伴随insertdelete操作,行数据是随机存储的。

如下图所示:

 

假设初始化5行数据,每行10bytes大小,按offsets排序是54321。现在删除24行,再insert一行20bytes的数据,在row directory slot2被使用,但实际的row data存储在row5之上。这个时候再按offsets排序就是2531 。随着你在数据块上的DML操作的越频繁,这种行的随机性就更强。



下面说下data block的设计,如下图所示



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值