Oracle ASSM三级位图块结构

前几天Piner发布了一个悬赏:寻找ASSM三级位图块的文章,同时给出了对于ASSM结构的猜想。

Piner猜想的结构和我想像的不同,我认为ASSM的结构应该如下图所示:

也就是说我认为BMB的结构应该是均衡的,同时段头的PAGETABLE SEGMENT HEADER同时充当了第0个3级位图块的角色。

在PAGETABLE SEGMENT HEADER中实际上我们可以很容易的看到这样的输出:--------------------------------------------------------

Segment Type: 1 nl2: 103 blksz: 2048 fbsz: 0

L2 Array start offset: 0x00000434

First Level 3 BMB: 0x00000000

L2 Hint for inserts: 0x0355cfad

Last Level 1 BMB: 0x03560c9c

Last Level II BMB: 0x0355cfad

Last Level III BMB: 0x00000000

Map Header:: next 0x034000bf #extents: 51 obj#: 33141 flag: 0x20000000

Extent Map

-----------------------------------------------------------------

也就是说,这里记录了First Level 3 BMB和Last Level III BMB的地址,那么这就足够了,这里的双向指针完全可以进行Level 3级位图块的导航,而这第0个三级位图块也即段头,并无需记录所有3级位图块的地址。

由于产生另外一个3级位图块并不容易,所以Piner才提出悬赏,他构造了一个873G的大表,仍然没有产生另外的3级位图块:SQL> select bytes/1024/1024/1024 "SIZE(G)" from user_segments where segment_name='TEST';

SIZE(G)

----------

873.25

为了寻找3级位图块,我着手做了以下实验,实验要能够:

1.实现更快快速的区间分配与扩展

2.使第0个3级位图块也即segment header尽量小,以便进一步扩展

为此我创建了一个2k block_size的表空间,设置uniform size区间大小为10K,这样可以尽量所见空间耗用:SQL> create tablespace eygle

2 datafile 'd:\EYGLE01.DBF' size 1024M reuse blocksize 2048

3 extent management local uniform size 10k

4 segment space management auto;

表空间已创建。

SQL> set timing on

SQL> alter tablespace eygle add datafile 'f:\eygle02.dbf' size 8191M reuse;

表空间已更改。

已用时间: 00: 44: 42.08

注意,增加了一个8G的数据文件,足足用了我44分钟,这是一个Windows平台,异常缓慢。

然后创建一个数据表,设置高pctfree值,使得每个Block只存储一行数据,然后插入1千万记录:SQL> create table EYGLE

2 (

3 ID NUMBER(8),

4 UNAME CHAR(1000)

5 )

6 tablespace eygle

7 pctfree 50

8 initrans 1

9 maxtrans 255

10 ;

表已创建。

已用时间: 00: 00: 00.00

SQL> begin

2 for i in 1 .. 100 loop

3 for i in 1 .. 100000 loop

4 insert into eygle values(i,'eygle');

5 end loop;

6 commit;

7 end loop;

8 end;

9 /

完成这些操作之后,这个表用了大约9G空间:SQL> select bytes/1024/1024/1024 sizegb from dba_segments

2 where segment_name='EYGLE';

SIZEGB

----------

8.9988327

此时第一个3级位图块出现了,这是多么珍贵的一个3级位图块啊:Start dump data blocks tsn: 12 file#: 13 minblk 4032222 maxblk 4032222

buffer tsn: 12 rdba: 0x037d86de (13/4032222)

scn: 0x0000.00bdc864 seq: 0x01 flg: 0x04 tail: 0xc8642201

frmt: 0x02 chkval: 0xf597 type: 0x22=THIRD LEVEL BITMAP BLOCK

Dump of Third Level Bitmap Block

number: 9 , next : 0x00000000

L2 Ranges :

--------------------------------------------------------

0x037d86dd

0x037dd22d 0x037e1d7d 0x037e68cd 0x037eb41d

0x037eff6d 0x037f4abd 0x037f960d 0x037fe15d

--------------------------------------------------------

End dump data blocks tsn: 12 file#: 13 minblk 4032222 maxblk 4032222

这个位图上上存在一个向下的指针:next : 0x00000000 ,当然现在还没有数值,我们可以再产生下一个3级位图块来观察。

那么实际上到这里已经足够了,我的图示已经得到了足够的说明。

-The End-

历史上的今天...

>>

2006-07-04文章:

2005-07-04文章:

By eygle on 2007-07-04 12:50 |

Comments (21) |

Internal | 1487 |

21 Comments

dump一下segment header block看一下

增加了一个8G的数据文件用了44分钟?晕!我才用了3分多

SQL> set timing on

SQL> alter tablespace justin add datafile 'E:\oracle\product\10.2.0\oradata\orcl

\justin2.dbf' size 8192M;

表空间已更改。

已用时间: 00: 03: 28.15

SQL>

我也是win平台win2kserver

非常不错。。。

原来认为双向链表如果太长的话,查找链表中间的数据不是太方便,可能是oracle认为L3不会太多,所以这样做了。

不过你的产生L3的思路不错,当初,我没有认为产生L3有这么大难度,就直接在8k的block上增加数据,结果是增加到了800多G,还是没有出现L3。后来,因为测试的任务紧,就没有再继续了。

感谢你的测试。

图上缺了一条线,segment header还应该指向最后一个L3 BMB,形成一个环,中间其他三级位图块之间是单向的。

to justin ;

我的这个测试机是比较差劲的了。

不知道这种情况下一个L1的数据块可以管辖多少个数据块,这样可以估算下数据量达到多少可以撑暴这个L3的所有块,以前读过liews把索引建立成二叉树,然后弄到32级撑暴的文章,感觉和这边有点异曲同工,呵呵!!!!!

为此我创建了一个2k block_size的表空间,设置uniform size区间大小为10K,这样可以尽量所见空间耗用:

虽然有错字,不过你的这个设定的确是成功的关键,不然又不知道需要n个G了果然有实力,学写学习!

导出的块中有pdba,记录的是父块的地址,所以中间几级都是双向的

to hxy;

在哪里?请帮忙指出一下,或者给个例子。

谢谢!

这里为什么要定义一个extent的大小为10K,

难道是用于估计插入多少行会出现三级块吗?

to xiaolong;

这个问题问的好。

我为了使区间尽量多,自然要使区间尽量小,而不同block_size最小区间是多大?你可以测试一下。

经过测试(版本为 9201 for win)

block_size=2k extent_size(min) = 4k

block_size=4k extent_size(min) = 8k

block_size=8k extent_size(min) = 16k

如果是是区间区间尽量多, 你的extent_size 为什么不等于4K?

又一个问题,如果你不使用Uniform Size,你的Extent很快会扩展到很大,那你可能永远也看不到3级位图块。

你可以检查一下你的创建语句,并可以顺便研究一下Uniform Size和Auto Allocate的区别。

谢谢eygle。 你点的2点, 我概念都有点模糊。

当extent auto Allocate时,不管block_size的大小, 0-15区段为64K. 15 - 18 为1M。

补充一小点:

这里的L1与Data Block的关系有点象share pool中bucket与chunk之间的关系。

从该segment的第1个区到第101区都是1个L1对应3个区,从第102个区开始是1个L1对12个区,增加幅度so大!后面的没试,电脑太破 ~

可见想弄出个L2来都挺崩溃的

大师,请教个问题,帮忙解答(L1 BMB怎么知道下面block块地址的):http://www.itpub.net/thread-1052467-1-1.html

这个测试表的数据大小大概是20g

100*100000*2k (one row is one block) = 20, 000, 000k= about 20g.

但是从数据文件看只有10g,所以我运行insert的时候总是提示不能扩展段.

'd:\EYGLE01.DBF' size 1024M

'f:\eygle02.dbf' size 8191M

后来我又加了俩个5g的数据文件,才成功insert所有的数据

Bytes: 20982353920

Blocks: 10245290

我在11.6下面测试的,大师,这是不是正确的。

谢谢!

assm的结构_Oracle ASSM三级位图块结构相关推荐

  1. Oracle PCTfree assm,Oracle 12C LMT ASSM 完美测试

    本帖最后由 sunyunyi 于 2017-9-7 17:35 编辑 目前服务于电力行业,致力于帮助客户解决生产过程中出现的问题,提高生产效率, 爱好书法,周易!愿结交志同道合之士!共同进步! 微信号 ...

  2. 数据库结构与模式 - 三级模式 两级独立性/两级映射

    数据库技术中采用分级的方法将数据库的结构划分为多个层次.最著名的是美国 ANSI/ SPARC 数据库系统研究组 1975 年提出的三级划分法 数据库系统划分为三个抽象级:用户级.概念级.物理级. ( ...

  3. impdp oracle 只导入表结构_oracle数据库怎么导入dmp,只导入数据不导入表结构?...

    使用方法: Exp parameter_name=value or Exp parameter_name=(value1,value2--) 只要输入参数help=y就可以看到所有帮助. EXP常用选 ...

  4. impdp oracle 只导入表结构_Oracle数据导入导出(expdp impdp)

    oracle数据泵的使用方式, 以及数据泵命令的参数说明 使用expdp和impdp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp ...

  5. oracle 树状结构一直出现不了_深入解析Oracle ASSM 段头块(PAGETABLE SEGMENT HEADER)结构...

    一.概念介绍 Oracle ASSM(Automatic Segment Space Managed)使用位图来管理数据库中的空间,具有管理简单.高并发等优点,ASSM的整体结构是3层位图块+数据块, ...

  6. oracle normal bitmap,深入解析Oracle ASSM结构之Level 1 Bitmap Block

    一.概念介绍 L1 BMB中存储了一组连续的同一个extent中的数据块空间使用信息,L1内部结构由Cache Header.Header Control及DBA range三层结构组成,Oracle ...

  7. oracle dump enq hw,经典故障分析 - ASSM引发的索引争用与 enq HW -contentio

    作者介绍: 孙加鹏 云和恩墨技术顾问 六年Oracle技术顾问经验,所服务的行业包括电信运营商.金融业.制造业等. 擅长Oracle的故障诊断.高可用架构.升级迁移等.目前主要服务于上海金融类客户. ...

  8. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)

    本地管理表空间(LMT)与自动段空间管理(ASSM)概念 创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management ...

  9. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念

    创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent ...

最新文章

  1. java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客
  2. 【转】让Chrome化身成为摸鱼神器,利用Chorme运行布卡漫画以及其他安卓APK应用教程...
  3. bzoj 4711 小奇挖矿 ——“承诺”类树形dp
  4. 羡慕女设计师啊,天生色感好!
  5. IDA Pro 数据库文件、函数窗口、结构体窗口
  6. python删除指定文件夹下文件和文件夹的方法
  7. 和你谈谈数据分析报告
  8. 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
  9. 使用OctreeQuantizer提高gdi+绘图质量
  10. android仿bilibili ui,android指纹识别、拼图游戏、仿MIUI长截屏、bilibili最美创意等源码...
  11. SPring cloud (3)A Ribbon 负载均衡 配置初步
  12. 网页英文字体和中文字体应用
  13. 4.算法通关面试 --- 树和图
  14. 结合原理与代码理解BiLSTM-CRF模型(pytorch)
  15. firefly 3399 开发板笔记
  16. 浙江生物计算机技术,New Page 1
  17. 知无涯者(The Man Who Knew Infinity)
  18. 电商项目超详细测试点整理(一)
  19. 虚拟信用卡(VCC)对比实体信用卡有哪些特点和优势?
  20. typescript学习:Generics泛型

热门文章

  1. Windwos中system、System32、SysWOW64区别
  2. CG-CTF-Web-层层递进
  3. 大学考试计算机基础应用试题及答案,大学计算机基础考试试题及答案
  4. python爬取基金历史净值_Python爬取天天基金网历史净值数据
  5. python pandas读取txt文件_python Pandas 读取txt表格的实例
  6. flex平均分布换行后自动对齐
  7. Vue2.x通用条件搜索组件的封装及应用
  8. 一起学React--组件定义和组件通讯
  9. python基本数据类型(四)-集合与运算符-python3笔记
  10. 构建创业公司突击小团队