楼主: grassbell

[精华] 偷窥Data block 的物理结构

[复制链接]
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
61#
发表于 2004-9-2 17:53 | 只看该作者
Row pieces
Chaining (for chained row pieces only)
Columns in the row piece
Cluster keys (for clustered data only)


除去Chaining (for chained row pieces only),Cluster keys (for clustered data only),其他的两个内容只要2个字节就够了,不是么!!!!!?????

使用道具 举报

回复
论坛徽章:
0
62#
发表于 2004-10-7 10:54 | 只看该作者
col 0: [ 1] 61 ==> column length(1 byte if length<250; otherwise 3 bytes) and values
"61" 代表"a",而"c1 02"=1,"c1 03"=2,它们的换算公式是什么?

使用道具 举报

回复
论坛徽章:
0
63#
发表于 2004-10-7 12:39 | 只看该作者
请问在块的什么地方标记出------被修改块已经不在内存中已被写到磁盘上?是如何标记的?

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
21
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:36
64#
 楼主| 发表于 2004-10-7 20:21 | 只看该作者
最初由 jsjsjsjs 发布
[B]请问在块的什么地方标记出------被修改块已经不在内存中已被写到磁盘上?是如何标记的? [/B]


我的理解:
脏块会放置在data buffer 中的所谓dirty link上等待被写入磁盘。写入后所在的buffer 则被放置到LRU链上,等待被重用。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
21
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:36
65#
 楼主| 发表于 2004-10-7 20:23 | 只看该作者
最初由 jsjsjsjs 发布
[B]
"61" 代表"a",而"c1 02"=1,"c1 03"=2,它们的换算公式是什么? [/B]


换算公式不详,是推测的。

使用道具 举报

回复
论坛徽章:
16
咸鸭蛋
日期:2011-09-06 18:06:46三菱
日期:2013-08-19 19:29:14
66#
发表于 2004-10-11 01:47 | 只看该作者
所有的TYPE类型有:
1        Undo header block (limited extents)        all, but superseded by type 14 from 8.0
2        Undo data block        all
3        Save undo header block (limited extents)       all, but superseded by type 15 from 8.0
4        Save undo data block        all
5        Data segment header block (limited extents, no freelist groups)        all, but superseded by type 16 from 8.0
6        Table/cluster/index segment data block        all
7        Temporary segment data block        all
8        Sort key block        all
9        Sort run block        all
10        Free list block        all, but superseded by type 22 from 8.0
11        Data file header block        all
12        Data segment header block (limited extents, with freelist groups)        all, but superseded by type 17 from 8.0
13        Compatibility segment        all
14        Undo header block (unlimited extents)        from 7.3
15        Save undo header block (unlimited extents)        from 7.3
16        Data segment header block (unlimited extents, no freelist groups)        from 7.3
17        Data segment header block (unlimited extents, with freelist groups)         from 7.3
18        Extent map block        from 7.3
19        Backup set piece header        from 8.0
20        Backup set directory block        from 8.0
21        Controlfile block        from 8.0
22        Free list block with free block count        from 8.0
23        LOB segment header block        from 8.0
24        LOB segment freelist block        from 8.0
25        LOB segment space usage index block        from 8.0
26        LOB segment space usage bitmap block        from 8.0
27        LOB segment chunk data block        from 8.0
28        don't know         
29        LMT space map header block        from 8.1
30        LMT space map block        from 8.1
31        don't know         
32        ASSM level 1 bitmap block        from 9.0
33        ASSM level 2 bitmap block        from 9.0
34        ASSM level 3 bitmap block        from 9.0
35        ASSM segment header block        from 9.0
36        ASSM extent map block        from 9.0
37        don't know         
38        System managed undo header block        from 9.0

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
67#
发表于 2005-2-5 12:12 | 只看该作者
太好了。
先作个标记,然后慢慢领会。

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
68#
发表于 2005-3-24 09:17 | 只看该作者
一条基本结构的row format 应该包括如下基本信息:
row 在block中的起始位置,就是存储在block row slots中的指针数值,就是2bytes的row dict entry;2bytes可以表示64k空间 因此一个bock最大为64k

在row上要包括一些额外信息,就是3个字节的row header: 如
fb: --H-FL-- lb: 0x1 cc: 2

其中一个字节表示行锁信息,itl标记,1bytes表示最多支持255个itl

其中一个字节表示该行在这个block中有几列,因为关于列类型,表列数目,列顺序都一样且冗余,因此没有必要存储在block中,oracle从数据字典获得这些信息;1bytes表示该行在该block中的数目,正好表示当一行超过255列的时候会自动发生行迁移,将多余行存储在其他block上。

另外一个bytes就是表示该row的状态信息,如是全部存储在该block中,还是发生迁移链接 etc

然后紧跟的是第n列的长度,第n列的内容 ....


block_row_dump:
tab 0, row 0, @0x1fb1 -8113
tl: 7 fb: --H-FL-- lb: 0x1 cc: 2 ---- tl = total length;cc = column count;每个row有3字节的row header;
col 0: [ 1] 64 ----一个字节记录column长度(如果长度小于250,否则用3个字节)。接着是colomn数据。
col 1: [ 1] 65
end_of_block_dump

如果发生行迁移/链接的话,自然要在row上标记row piece的位置,6bytes FFFBBBBBBRRR

也是大众化的体系结构

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
87
生肖徽章2007版:虎
日期:2009-03-02 15:42:532011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:32数据库板块每日发贴之星
日期:2011-04-05 01:01:01现任管理团队成员
日期:2011-05-07 01:45:08鲜花蛋
日期:2011-06-26 11:15:422011新春纪念徽章
日期:2011-01-25 15:41:01
69#
发表于 2005-4-18 10:10 | 只看该作者
最初由 shangym 发布
[B]问个问题
rdba: 0x00c0007a (3/122)
怎么看出来是file#=3阿, 0x007a=122好理解,c0为什么是3呢? [/B]


十六进制转十进制后除以4。
如:0c =12 /4=3  04=4/4=1 08=8/4=2 1c=28/4=7

rdba: 0x00c0007a (3/122) 其实这是Dump时合成的,实际上这是由不同地址的值表示的。

使用道具 举报

回复
论坛徽章:
0
70#
发表于 2005-8-15 23:18 | 只看该作者
最初由 grassbell 发布
[B]5. 关于Minimum row length
Oracle确实有Minimun row length的要求,即5 bytes的实际数据。如果加上3 bytes的row header, 和在block hader 中占据的2 bytes的row directory entry ,还有1byte的column长度,应该一共是11 bytes

所以,一个block中最多包括 db_block_size/11 条rows

详情可参考(该贴也简单介绍了row的物理结构):
http://www.itpub.net/showthread. ... 15&pagenumber=1 [/B]


这里有点小问题,不应该用db_block_size来除吧

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表