博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle浅谈之逻辑体系第一回
阅读量:7067 次
发布时间:2019-06-28

本文共 2226 字,大约阅读时间需要 7 分钟。

hot3.png

    这里是数据文件存放数据之处,也是数据库存在的根本。不过这样的数据文件让我们使用者感觉无从下手了解,好像黑盒子一样。但是只要正确认识和剖析Oracle的体系逻辑结构,就可以让我们进一步加深对Oracle数据库的了解,不在是停留在黑盒子的认识水平,从而工作起来游刃有余。

    这里要隆正介绍的体系逻辑结构是:表空间(TABLESPACE)、段(SEGMENT)、区(EXTENT)、块(BLOCK)。ORACLE SERVER正是条理地通过表空间以及段、区、块控制磁盘空间的合理高效的使用,观察一下图:

    从图中我们不难看出,数据库(DATABASE)由若干个表空间(TABLESPACE)组成,表空间由若干个段(SEGMENT)组成,段由若干个区(EXTENT)组成,区又是由Oracle的最小单元块(BLOCK)组成。

    其中表空间又包含系统表空间、回滚段表空间、临时表空间、用户表空间。除了用户表空间外其他三种表空间有各自特定的用途,不可随意更改和破坏,尤其是系统表空间更是需要谨慎的保护。

    从小到大来说,一系列连续的BLOCK组成了EXTENT,一个或多个EXTENT组成了SEGMENT,一个或多个SEGMENT组成了TABLESPACE,而一个或多个TABLESPACE组成了DATABASE(一个DATABASW要想存在,至少需要哟SYSTEM及UNDO表空间)。

    我们新建的表其实是和段(SEGMENT)直接对应,其中T表就是T段,T2表就是T2段,T3表就是T3段(不过要注意,其实表并不是只对应一个段,如表中包含LOB类型列,则LOB至少会有两个段,数据段和索引段,如表有分区,则每个分区又都独立成段)。

    如果建表的命令如下:

    create table t1(id int) tablespace tbs_text;

    create table t2(id int) tablespace tbs_text;

    create table t3(id int) tablespace tbs_text;

那显而易见t1段,t2段,t3段都属于 tbs_text表空间。

    假如一个区有固定是由10个数据块组成的,我们插入t表的动作就是这样的:

        数据插入某个区EXTENT1的第1个数据块中,很快就插满了,然后就插入第2个同属于该EXTENT1区的数据块中,接下来第2个又插满了,插第三个...当准备插入第11个数据块的时候,这个区满了。接下来只好插入EXTENT2区,直至插完EXTENT3、EXTENT4后,而这些EXTENT1、EXTENT2、EXTENT3、EXTENT4组成了T段,也就是T表。

    Oracle的这个EXTENT的设计师为了避免过度扩展,因为块的尺寸太小了,如果以块的尺寸为单位进行扩展,Oracle数据库的运行就会变得很慢。

下面我从Oracle逻辑结构的最小单位数据块BLOCK说起:

    虽然说BLOCK是Oracle的最小逻辑数据单位,但是所有数据在文件系统层面的最小物理存储单位是字节,操作系统也有一个类似Oracle的块容量的参数(block size),但是Oracle总是访问整个Oracle BLOCK,而不是按照操作系统的 block size来访问的。

    一般情况下大多数操作系统OS的块容量为512字节大小或其整数倍,而数据库块一般默认设置为8KB,除此之外也有系统将其设置为2KB、4KB、16KB、32KB、64KB等其他大小,但是数据库的BLOCK一般要设置为操作系统OS块容量的整数倍,这样可以减少IO操作。

    Oracle的数据库块并不是简单地往里插数据,插满了装不下就插入到另一个数据块这么简单,而是额外提供了一定的管理功能。数据块的组成分为数据块头(包含标准内容和可变内容)、表目录区(table directory)、行目录区(row directory)、可用空间区(free space)、行数据区(row data)、这5个部分,具体如图:

 

数据块分成了5个部分:

    1. 数据块头(header)中包含了此数据块的概要信息,例如块地址(block address)及数据块所属的段的类型(比如到底是表还是索引).

    2. 表目录存放了什么呢?只要有一行数据插入到数据库块中,那该行数据所在的表的信息被存储在这个区域。

    3. 行目录存放什么呢?其实就是存放你插入的行的地址。

    4. 可用空间区说来就简单了,就是块中的空余空间,为什么要有空余呢?这个空余的多少由Oracle的pctfree参数设置,如果是10,该块将会空余10%左右的空间。此外如果是表或者索引块,该区域还会存储事务条目,大致有23字节左右开销。

    5. 而行数据区域就更简单了,就是存储具体的行的信息或者索引的信息,这部分占据了数据块绝大部分的空间。

这里数据块头、表目录区、行目录区被统称为管理开销,其中有些开销的容量是固定的,而有些开销的总容量是可变的,数据块中固定及可变管理开销的容量平均在84到107字节之间。

    我们把一些连续的数据块组合在一起,就形成了区(EXTENT),Oracle中这个被称之为EXTENT的数据库逻辑存储分配单位就是这么形成的。

    EXTENT是Oracle数据库分配空间的最小单位,请注意分配这两个字眼。

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/hcy8888/blog/903072

你可能感兴趣的文章
Akamai推出全新托管服务,助力在线企业应对多重网络性能挑战
查看>>
【重磅】中国AVS2标准被国际超高清联盟UHD Forum采纳,推荐给全球视频服务商
查看>>
神奇,教你用随机数打印hello world
查看>>
下一个风口:物联网!
查看>>
Memblaze亮相2016 OpenPOWER中国峰会 开放共赢是未来
查看>>
MongoDB之建立Windows和本地虚拟机的双向连接
查看>>
Elasticsearch 安装和后台运行(真实有效,Mac版本已经验证)
查看>>
一个逼格很低的appium自动化测试框架
查看>>
微软应用最遭贼惦记
查看>>
恒温锅在手,分子料理分分钟搞定
查看>>
Java基础常用API(转载)
查看>>
为什么说企业CMO必须关注区块链变革?
查看>>
Veeam成立十周年,展望未来十年的科技发展
查看>>
xcode中嵌入framework(接入快用最新SDK遇到的问题)
查看>>
从“祸从口出”的胖帕切入,看Oculus的VR发展之路
查看>>
区块链落地面临的关键问题及其解决方案
查看>>
如何在云上安全高效地存放您的配置 - 代码示例
查看>>
eBPF监控工具bcc系列三自定义工具trace
查看>>
使用Admin监控
查看>>
Gartner:2016年第四季度全球服务器收入下滑1.9%
查看>>