暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ASSM(Automatic Segment Space Management自动分段空间管理)实验-19C下

手机用户4667 2024-12-20
115

1、实验,同一个表空间及数据文件上创建2个不同的表,通过dba_segments查看对应的段信息,注意此时的段类型是ASSM(默认一个表创建一个分区,一个分区最小创建8个块),如下图。

同时记得此时的HEADER_BLOCK分别为10242和10250。通过dba_extents查看对应的extent分区信息,如下:

可以看出此时extents的起始块分别是10240和10248。同上面的10242和10250少2个块。这2个块是做什么用的呢?

这里为分区头,不同对象(TMP_100和TMP_1000)对应第一个区的第一个块(block_id=10240或者10248)是FIRST LEVEL BITMAP BLOCK,第二个块(block_id=10241或者10249)是SECOND LEVEL BITMAP BLOCK,

这两个块是用来管理free block的,
第三个块(block_id=10242和10250)是PAGETABLE SEGMENT HEADER,这里也没数据。这个块才是segment里的HEADER_BLOCK,再后面的块就是用来记录数据的。(即要从第四个块才有数据),


select rowid,dbms_rowid.rowid_relative_fno(rowid) || '_' ||dbms_rowid.rowid_block_number(rowid) || '_' || dbms_rowid.rowid_row_number(rowid) location from SALE.TMP_1000;

TMP_100如下,从10251才有:

TMP_1000如下:


同时也可以看出,一个分区一开始的默认分配的块个数是8个。并且都是分区开始算的。比如TMP_1000的第一个分区,即:10240开始算8个块,得最后的块ID10247。

此时由于新建了一个新表也叫段(TMP_100),ORACLE自动分配的第一个分区即从下一个空的块开始。如上面的10248~10255。下个分区的地址就是10256~10263,再下一个就是10264~10271等。

故此时的分区起始就是10248,它对应的段的起始块就是要+2后的10250.和上面图一对应.

当TMP_1000由于业务需要插入大量数据时,Oracle自动给它分配了一些连续的分区,如图二中可以看出,同时Oracle会预判断,像TCP的滑动窗口一样。后续就不会还是按照8个块一个分区,8个块一个分区一样进行分配块了。

而是一下子就分配多个连续块的大分区,如下图:128个块一个分区,连续的分区。分区也是自动管理。

总之,Oracle很厉害,很智能。记录只是加深一些记忆和理解。

最后修改时间:2024-12-20 16:14:10
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论