表3.5 文章管理测试用例表_本地管理表空间管理机制

b042af661abcdf02b8ca84966b5c8e17.png

表空间是一种为段(表,索引等)提供空间的逻辑结构,所以,当在表空间中增加,删除段的时候,数据库就必须跟踪这些空间的使用。

如下例所示,假定一个新创建的表空间包含了五个表

表一……表二……表三……表四……表五……未用空间

当我们删除表四的时候,就有如下结果

表一……表二……表三……空闲空间段……表五……未用空间

很明显,ORACLE需要有一个机制来管理表空间中各数据文件的这些分配的或未分配的空间,为了跟踪这些可以使用的空间(包括未分配使用的和可以重复使用的),

对于每一个空间,我们必须知道:

1、这个可用空间位于什么数据文件

2、这个空间的尺寸是多大

3、如果它在用了,是哪一个段占用的这个空间

直到8i之前,所有的表空间都是采用字典管理模式,为了确保能保存以上的信息,ORACLE用了两个数据字典表:UET$(已使用的区间)或FET$(空闲空间):

SQL> desc UET$

Name Null? Type

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

SEGFILE# NOT NULL NUMBER

SEGBLOCK# NOT NULL NUMBER | The segment that uses this space

EXT# NOT NULL NUMBER

TS# NOT NULL NUMBER | The tablespace ID and the file

FILE# NOT NULL NUMBER | ID for that tablespace

BLOCK# NOT NULL NUMBER

LENGTH NOT NULL NUMBER | The location and size of the chunk

SQL> desc FET$

Name Null? Type

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

TS# NOT NULL NUMBER | The tablespace ID and the file

FILE# NOT NULL NUMBER | ID for that tablespace

BLOCK# NOT NULL NUMBER

LENGTH NOT NULL NUMBER | The location and size of the chunk

查询该表可以看到,每个使用空间或空闲空间(不一定是一个extent,可以是多个extent)都在该表中对应了一行。它的工作方式是当一个段

被删除的时候,ORACLE就移动UET$中相应的行到FET$,这个过程的发生是连续的,而且可能发生等待。当并发性很高的时候,数据字典的争用

就来了。

另外有一个问题就是,当表的空间很不连续或表空间有大量的碎片引起这两个表的增大,那么也就会引起数据库性能上的下降。

本地管理表空间正是为了解决这一问题来的,在表空间的空间管理上,ORACLE将存储信息保存在表空间的头部的位图中,而不是保存在数据字典中。

通过这样的方式,在分配回收空间的时候,表空间就可以独立的完成操作也不用与其它对象关系。

下面就让我们进入到本地管理表空间的内部,看看ORACLE是怎么实现这一工作的。

Uniform方式的本地管理表空间

1、 先创建了一个本地管理的表空间,区间统一大小分配为64K

SQL> create tablespace demo

datafile '/ora01/oem/oemdemo01.dbf' size 10m

extent management local uniform size 64k;

2、 在该表空间中创建一个表

SQL>create table demotab ( x number ) tablespace demo

storage ( initial 1000K next 1000k );

我们通过查询该表

SQL> select t.table_name,t.initial_extent,t.next_extent from user_tables t where t.table_name = 'DEMOTAB';

TABLE_NAME INITIAL_EXTENT NEXT_EXTENT

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

DEMOTAB 1024000 65536

可以发现,该表的存储参数并不是我们指定的参数INITIAL_EXTENT,而是uniform size的整数倍,NEXT_EXTENT则等于uniform size。我们从该

查询就也可以看到如下情况

SQL>select count(*) from user_extents where segment_name = 'DEMOTAB';

COUNT(*)

----------

16

也就是说,该表在该表空间中已经存在16个extent,而不是一个extent(这是与字典管理的差别,如果是字典管理的表空间,如果创建以上的表,该查询的结果是1)。

3、 获取该数据文件的文件ID

SQL> col name format a30 trunc

SQL> select file#, name from v$datafile;

File# NAME

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

1 /oras1/oem/oemsystem01.dbf

2 /oras3/oem/oemundo01.dbf

3 /ora01/oem/oemoem_repository01

4 /ora01/oem/oemrcat01.dbf

5 /ora01/oem/oemdemo01.dbf

我们可以检查uet$与fet$

SQL> select count(*) from uet$ where file# = 5;

COUNT(*)

----------

0

SQL> select count(*) from fet$ where file# = 5;

COUNT(*)

----------

0

4、 可以看到,ORACLE没有在这两个表中保存任何信息,现在我们dump该数据文件的第三个块。

SQL> alter system dump datafile 5 block 3;

System altered.

查看DUMP文件,有如下信息

Start dump data blocks tsn: 5 file#: 5 minblk 3 maxblk 3

buffer tsn: 5 rdba: 0x01400003 (5/3)

scn: 0x0000.202f7a6f seq: 0x01 flg: 0x00 tail: 0x7a6f1e01

frmt: 0x02 chkval: 0x0000 type: 0x1e=KTFB Bitmapped File Space Bitmap

File Space Bitmap Block:

BitMap Control:

RelFno: 5, BeginBlock: 9, Flag: 0, First: 16, Free: 63472

FFFF000000000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

.....

注意其中的FFFF00,,这是16进制的表现方法,我们转换为二进制,有

1111,1111,1111,1111,0000,0000

发现这里有16个1,每一个1就是一个位(bit),代表64K,也就代表了该表空间有已经分配了的16个extent,如果我们将该表扩展,将又有什么

结果呢?

SQL> alter table demotab allocate extent;

Table altered.

SQL> alter table demotab allocate extent;

Table altered.

SQL> alter table demotab allocate extent;

Table altered.

这样之后,我们应该有19个extent了,再dump第三个块

Start dump data blocks tsn: 5 file#: 5 minblk 3 maxblk 3

buffer tsn: 5 rdba: 0x01400003 (5/3)

scn: 0x0000.202f7c64 seq: 0x01 flg: 0x00 tail: 0x7c641e01

frmt: 0x02 chkval: 0x0000 type: 0x1e=KTFB Bitmapped File Space Bitmap

File Space Bitmap Block:

BitMap Control:

RelFno: 5, BeginBlock: 9, Flag: 0, First: 19, Free: 63469

FFFF07 0000000000 0000000000000000 0000000000000000 0000000000000000

除了以前的FFFF,现在多了07,怎么解释呢?

07转换为二进制为0000,0111,但是还是不够解释以上的情况,这里我们没有考虑到字节交换的情况,因为以上FF交换后还是FF,但是如果是07

,我们就必须考虑字节交换(因为计算机是一个字节一个字节的写,一个字节占两位当然是先写后面了,如从01到0F到FF为止。如果我们明白

了,那么FFFF07转换为二进制为 1111,1111,1111,1111,0000,0111。

每个字节交换得

1111,1111,1111,1111,1110,0000

可以发现,这里有19个1,也就是19个位(bit),代表了现在的19个extent。

5、 同样我们dump该数据文件第9个块,则有

Start dump data blocks tsn: 5 file#: 5 minblk 9 maxblk 9

buffer tsn: 5 rdba: 0x01400003 (5/3)

scn: 0x0000.202f7c64 seq: 0x01 flg: 0x00 tail: 0x7c641e01

frmt: 0x02 chkval: 0x0000 type: 0x1e=KTFB Bitmapped File Space Bitmap

Extent Control Header

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

Extent Header:: spare1: 0 space2: 0 #extents: 16 #blocks: 127

last map 0x00000000 #maps: 0 offset: 4128

Highwater:: 0x01c0000a ext#: 0 blk#: 0 ext size: 7

#blocks in seg. hdr's freelists: 0

#blocks below: 0

mapblk 0x00000000 offset: 0

Disk Lock:: Locked by scn: 0x0006.012.00000017

Map Header:: next 0x00000000 #extents: 16 obj#: 3090 flag: 0x40000000

Extent Map

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

0x01c0000a length: 7

0x01c00011 length: 8

0x01c00019 length: 8

0x01c00021 length: 8

0x01c00029 length: 8

0x01c00031 length: 8

0x01c00039 length: 8

0x01c00041 length: 8

0x01c00049 length: 8

0x01c00051 length: 8

0x01c00059 length: 8

0x01c00061 length: 8

0x01c00069 length: 8

0x01c00071 length: 8

0x01c00079 length: 8

0x01c00081 length: 8

nfl = 1, nfb = 1 typ = 1 nxf = 0

SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 End dump data blocks tsn: 5 file#: 5 minblk 9 maxblk 9

这是该数据文件中表DEMOTAB的表头(一个块)信息,从这里可以看到,该表从第9个块开始使用Highwater:: 0x01c0000a已经是第10个块了,从以上列表,我们也能清楚的看到,该表耗费了16个区间。

由于该表是数据文件的第一个表,所以位图区占用从3到8共6个块,加上前面两个文件头,也就是说,在数据文件头部共8个块用于系统消耗。

如果我们的db_block_size为8192,那么很明显,占用的空间为64K(注意:对于不同的块大小,文件头部的块个数与大小可能会不一样)。

也因为仅仅操作数据文件头部几个块,不用操作数据字典,所以ORACLE在本地管理的表空间中添加,删除段的时候,效率要比字典管理的表空间快。特别是在并发性很强的空间请求中。

ORACLE通过强制性的手段使本地管理表空间中的所有Extent是同样大小的,尽管你可能自定义了不同的存储参数。

6、 补充一些字典管理表空间的不同

a. 如果是字典管理,表空间中的表的区间的大小取决于表的存储参数,如果没有定义,则取表空间的通用存储参数。所以每个表的区间大小可以不一样。

b. 如果不指定表的最少区间数,那么默认创建的时候,该表只有一个区间,而不是多个区间。

c. 字典管理的文件头只占用一个块,第一个表的HWM应当是Highwater:: x01c00003,关于这个可以自己dump该数据文件查看。

Autoallocate的本地管理表空间

在自动分配的本地管理的表空间中,区间尺寸可能由以下尺寸组成64k, 1m, 8m, 64m 甚至是256m。但是不管多大,都有一个通用尺寸64k,所以64K就是该表空间的位大小。

SQL> create tablespace dummy

datafile 'c:dummy01.dbf' size 100m

autoallocate;

Tablespace created.

SQL> create table x1 (x number)

tablespace dummy

storage (initial 50M);

Table created.

SQL> select file# from v$datafile where name like '%DUMMY%';

FILE#

----------

12

SQL> select extents from user_segments

where segment_name = 'X1' ;

EXTENTS

----------

50

SQL> alter system dump datafile 12 block 3;

System altered.

*** SESSION ID11.59) 2002-11-22 10:37:35.000

Start dump data blocks tsn: 19 file#: 12 minblk 3 maxblk 3

buffer tsn: 19 rdba: 0x03000003 (12/3)

scn: 0x0000.00f2959b seq: 0x01 flg: 0x00 tail: 0x959b1e01

frmt: 0x02 chkval: 0x0000 type: 0x1e=KTFB Bitmapped File Space Bitmap

File Space Bitmap Block:

BitMap Control:

RelFno: 12, BeginBlock: 9, Flag: 0, First: 800, Free: 62688

FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF

FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF

FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF

FFFFFFFF00000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

0000000000000000 0000000000000000 0000000000000000 0000000000000000

可以看到该表实际只有50个区间(extent),但是有800个位(bit)

50*1024=800*64

还可以看出,位大小并不等于extent大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET | 多线程下的调用上下文 : CallContext

【.NET】| 总结/Edison Zhou最近在分析现在团队的项目代码(基于.NET Framework 4.5),经常发现一个CallContext的调用,记得多年前的时候用到了它,但是印象已经不深刻了,于是现在来复习一下。1CallContext是个…

每日一笑 | 哪个男人到底是谁?!

全世界只有3.14 % 的人关注了数据与算法之美(图源网络,侵权删)

min里所有的参数都不存在_高中生物所有的考点难点,其实都在你不仔细看的课本里,必修1-3超强记忆手册!...

对很多理科生来说,高中生物就是一门不是文科胜似文科的学科。很多数学、物理成绩非常突出的学生却不能在这样一门“理科”课程当中取得优势。生物老师在这门学科的提高上反复强调“回归课本”却又让很多习惯刷题的理科生不知无从下手。进入高三后,生物、…

我看电商(作者近三十年从事零售及电子商务管理的总结和分享)

我看电商(作者近三十年从事零售及电子商务管理的总结和分享) 黄若 著 ISBN 978-7-121-20268-1 2013年6月出版 定价:39.00元 284页 16开 编辑推荐 近年来电商行业在中国迅猛发展,电子商务正在日益深入的影响着越来越多人的生活。…

每日一笑 | 坐牢吗?学编程那种~

全世界只有3.14 % 的人关注了数据与算法之美(图源网络,侵权删)

VMware vSphere 5.1 群集深入解析(二十六)- 数据存储维护模式汇总

VMware vSphere5.1Clustering DeepdiveHA.DRS.Storage DRS.Stretched ClustersDuncan Epping &Frank DennemanTranslate By Tim2009 / 翻译:Tim2009目录版权关于作者知识点前言第一部分 vSphere高可用性第一章 介绍vSphere高可用性第二章 高可用组件第三章 基本…

硕士论文研究「AI预测性取向」:化妆等因素并不影响判断

全世界只有3.14 % 的人关注了数据与算法之美2017 年,斯坦福大学的一篇《深度学习通过面部识别判断性取向超越人类》曾引发了极大争议,其通过 AI 算法仅需「看面相」即可判断一个人是不是同性恋的方法让众人感到一丝恐慌,也让技术研究者们对于…

[翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切

Go vs C#, Part 3: Compiler, Runtime, Type System, Modules, and Everything Else | by Alex Yakunin | ServiceTitan — Titan Tech | Medium目录译者注相似性编译垃圾回收模块类、结构、接口错误处理相等性(, !)基础类库两种语言中存在的其他类似特…

指针易出错点一

2019独角兽企业重金招聘Python工程师标准>>> 声明指针中会遇到的问题 int* p1,p2; 上面这条语句的本意应该是声明两个指向int的指针,而实际的效果是p1是指针类型,p2却是int类型,这是因为在C语言中,声明和解释的语法并…

206块积木,72套进阶玩法!玩转STEAM教育,帮你省掉上万块的乐高课

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人,小木我可是大大小小的积木阅览无数,当然乐高也不会放过,虽然“钱包君”已经是路人了。(每月的工资用来买乐高~)之前给大家推荐了一款STEM积木,小小…

python如何正则匹配浮点值_python使用正则搜索字符串或文件中的浮点数代码实例...

# -*- coding: utf-8 -*-#----------------------------------------------------------------------# FileName:gettxtdata.py#功能:读取字符串和文件中的数值数据(浮点数)#主要提供类似matlab中的dlmread和dlmwrite函数#同时提供loadtxtdata和savetxtdata函数#Data: 2013-1-1…

用了VS2022,你可能再也回不去旧版!

VS2022发布第11天,最直接的使用感受就是智能提示太哇塞了,之前是提示一个单词,现在直接提示一行,撸码速度直接起飞!再就是打开ASP.NET Core的源码,500多个项目3G的体积,过程比VS2019要顺滑多了&…

poj2578

简单题 #include <cstdio>int main() {int f[5];for (int i 0; i < 3; i){scanf("%d", &f[i]);if (f[i] < 168){printf("CRASH %d\n", f[i]);return 0;}}printf("NO CRASH\n");return 0; } View Code 转载于:https://www.cnblo…

意大利归还中国文物;翟天临咪蒙成考公务员题目;携程回应五一机票涨价;腾讯未成年人网络保护体系上线;这就是今天的大新闻...

今天是3月25日农历二月十九今天星期一整个周末都贡献给都挺好了下面是今天的大新闻意大利归还796件中国文物&#xff08;新京报&#xff09;3月23日&#xff0c;在中国主席和意大利总理孔特共同见证下&#xff0c;中意双方代表交换关于796件套中国流失文物艺术品返还的证书。这…

Hello Blazor:(1)像ASP.NET WebForm一样写代码

写在前面最近&#xff0c;刚开始学习Blazor。对于后端出身的程序员来说&#xff0c;使用Blazor上手开发前端程序&#xff0c;门槛确实降低了不少。还在观望的朋友可以尝试入坑了。在学习和编写Blazor程序的过程中&#xff0c;我产生了一些想法&#xff0c;将会逐渐在本系列中呈…

VScode设置背景颜色

1.打开VSCode,点击左上角文件选项 2.点击首选项 3.点击颜色主题 4.使用键盘上下方向键即可选择不同颜色的背景

选择比努力更重要,这些微信号值得你细细品读。

一个人无论是平凡的还是不平凡的只是自自然然地按照自己喜欢的样子去生活这是最省力且最快乐的人生选择以下几个优质公众号能让你在闲暇的时候不断的提升自我&#xff0c;拓宽视野愿以书卷气&#xff0c;行我路千里长按二维码&#xff0c;选择【识别图中二维码】关注少年数学家…

ASP.NET Core 6 Minimal API

ASP.NET Core 6 Minimal APIIntro微软在 ASP.NET 6 Preview 4 的介绍文章中介绍了即将到来的 ASP.NET Core 6 中的最小 API 的雏形&#xff0c;我们现在已经基本可以达到最小化 API 了雏形了&#xff0c;在 Preview 4 的时候就写了这个小示例&#xff0c;但是不够简洁&#xff…

支付宝今日起还卡收费;大城市女性买房猛增;小米发布100W快充技术;严查非法办学行为;交大通报博导辱骂学生;这就是今天的大新闻...

今天是3月26日农历二月二十今天星期二不是个让人可以昏昏欲睡的日子下面是今天的大新闻支付宝还信用卡开始收费&#xff08;澎湃新闻&#xff09;根据支付宝此前发布的消息&#xff0c;自3月26日起&#xff0c;通过支付宝给信用卡还款超过免费额度后将收取0.1%的服务费&#xf…

WPF任务栏同步进度

一、概要本篇文章主要分享使用TaskbarItemInfo对象&#xff08;WPF&#xff09;在window操作系统的任务栏中同步任务进度的功能。什么是TaskbarItemInfo对象&#xff1f;TaskbarItemInfo类为 Windows 7 任务栏功能提供托管包装。有关 Windows shell 和本机任务栏 Api 的详细信息…