当前位置:首页 > 日记 > 正文

深入解读oracle数据块实现的原理

深入解读oracle数据块实现的原理
下午,学习oracle 10g R2概念

把笔放在这儿。

Oracle管理存储空间数据库中的数据文件(数据文件)的单位是数据块(数据块),一个数据块是最小的(逻辑)数据库中的数据单元,对应的数据块,在操作系统级别的所有数据的最小的物理存储单元是一个字节(字节),每个操作系统都有一个参数,称为块容量(块大小),Oracle会访问整数(甲骨文)的数据块,每次获取数据,而不是访问数据,根据操作系统块的能力。

标准数据块(数据块)的数据库的容量是由初始化参数指定db_block_size.in之外,用户还可以指定五个非标准数据块容量(nonstandardblock大小)。该数据块的块容量应设置为操作系统的块容量的整数(同时较小比最大块容量限制)以减少不必要的我/ O操作。Oracle数据块是Oracle可以使用和分配的最小存储单元。

数据块结构

在Oracle中,数据块是否存储在表(表)、索引(索引)或集群表(群集数据)中,块的内部结构类似。方框图如下所示:
该图显示了数据块的各个部分,包括:数据的大小(包括标准内容和变量的内容(常见)和可变头(表),表目录目录(目录),行目录(免费),免费空间),行数据区(行数据)的图。这两个箭头表示数据块中的可用空间区域的容量是可变的。

数据块(包括标准内容和可变内容)

数据头(头)包含数据块的轮廓信息,如块地址和数据块的类型(段),例如表或索引。

表目录区

如果数据表存储数据块中的数据行,则数据表的信息将被记录在数据块的表目录区(表目录)中。

行目录区

这个区域包含在数据区(行数据区)中存储在数据块中的数据行(每个行块的地址)的信息。{数据块可以保存完整的数据行,并且只能保存部分数据行,因此本文使用了行}。

当使用数据块(数据块)的行目录区域(行目录)空间时,即使删除了数据行,也不会恢复行目录空间。例如,当清除包含50个记录的数据块时,它的块(头)的行目录区域仍然占用100字节(字节)空间。

管理开销

数据块(数据块头部),表目录区(目录),且行目录区(rowdirectory)统称为管理开销(开销)。一些的开销是固定的,和一些开销的总容量是可变的,固定的和可变的管理开销的数据块的容量是84和107字节(byte)之间。

行数据

数据块(数据块)中的行数据区域(行数据)包含表或索引的实际数据。数据行可以跨越多个数据块。

可用空间区

当插入新数据行或更新数据行需要更多的空间(例如,在前一行的最后一个字段为空(null结束),现在是更新为非空值),并在可用空间区空间(自由空间)将被使用。如果一个数据块(数据块)属于数据段(数据段)的表或簇表,或属于索引的索引段(索引段),然后交易项目也可能存储在它的可用空间区(交易)。如果在一个块中的数据行是行,它被插入,更新访问,删除和选择…对于UPDATE语句,我们需要在这个块中保存事务条目。事务条目所需的存储空间取决于操作系统。在一个普通操作系统中,事务条目需要大约23字节(字节)。

可用空间管理

可用空间可以手动或自动管理。

在数据库中,每个段(段)的可用空间可以自动管理。段中可用的可用空间以位图(位图)的形式记录,这与列表方式中可用块的管理不同。自动段空间管理具有以下优点:

使用起来很容易。它具有更高的空间利用效率,特别是对于具有不同数据容量的每一行(或其他对象)。它能更好地调整多实例行为。在性能/空间利用方面。

用户可以在创建本地托管表空间(本地托管表空间)时选择自动段空间管理功能。

数据块可用空间的可用性与优化

有两种SQL语句可以增加数据块中的可用空间:删除语句和更新现有数据值的UPDATE语句以占据较小的值:

如果INSERT语句与上述两个操作在同一事务(transaction)和位于空间的声明发布后,然后插入语句,可以使用释放空间。如果INSERT语句和不同的东西在自由空间中的语句(如他们是不同用户提交的),然后只有在提交释放空间发表声明后,和插入数据,必须使用数据块,INSERT语句将使用空间。

在数据块中释放的空间(数据块)是不必连续可用空间区(自由空间),Oracle将满足以下条件时将释放空间在自由空间区域:(1)INSERT或UPDATE语句选择一个数据块足够自由的空间来容纳新的数据,(2)但这段自由空间是不连续的,数据不能在连续空间中的数据块写的。只有当上述条件满足,可以Oracle数据块中的可用空间合并,这样可以避免频繁的空间融合和影响数据库的性能。

行链接(行链接)和行迁移(行迁移)

有两种情况导致一行数据的表太大,和一个数据块(数据块)是不能成立的。在第一种情况下,一个数据块不适应当一行数据被插入。在这种情况下,Oracle将这行数据块中的数据链(链)段内。行链接(行链接)通常发生在大数据插入行,如数据行包含一个数据类型的长或LONG RAW列。链接是不可避免的在这个时候。

第二种情况是,原本存储在一个数据块中的数据行(数据块),因为更新操作导致长度增长,和数据块中的可用空间不能满足不断增长的数据行。在这种情况下,Oracle内这行数据(迁移)到新的数据块。Oracle存储一个指向新数据块的位置迁移的数据线位置,迁移数据rowid保持不变。

当数据链路发生(链式)或迁移(迁移)时,访问它会导致I/O性能下降,因为Oracle必须访问更多的数据块(数据块)以从这些数据行获取数据。

PCTFREE,PCTUSED,线链接(行链接)

在手工管理的表空间(手动管理的表空间),用户可以使用PCTFREE和PCTUSED参数的存储管理在一定时期内控制(段)的插入和更新操作,如何使用数据块属于这段(数据块)可用于空间。用户可以也为指标设置PCTFREE参数时创建或修改(索引存储在索引段(索引段))。

PCTFREE参数

PCTFREE参数用于设置至少一个数据(块)储备(储备)多少可用空间(百分比),以备数据量时可能出现更新数据块中的现有数据的增长。例如,一个用户创建一个表时创建表的语句,指定以下参数:

PCTFREE 20

此参数设置每个数据块(数据块)在相应的数据段(数据段)的表至少保持20%的可用空间,以便它可以在更新现有的数据块中使用。只要行数据区域的容量和数据块的头不超过该数据块的总容量的80%,用户可以插入新的数据,并把数据区域的行数据行(行数据区),并将相关信息写入数据块(顶区)。

下面的插图显示了PCTFREE的角色:
PCTUSED参数

的PCTUSED参数是用来决定是否一个数据块(数据块)可以用来插入新数据。基础是数据块的容量(行数据)和数据块(开销)对数据块的总容量比例最大的帐户。当一个数据块中的可用空间比例小于PCTFREE参数,Oracle认为数据块不可用插入新的数据到数据块所占的体积比低于PCTUSED参数。在占有率大于PCTUSED参数,Oracle将只使用可用空间的数据块的数据时,在数据块更新。比如,一个用户创建一个创建表的语句表时,指定以下参数:

PCTUSED 40

在这个例子中,当一个数据块占用容量比为40%以上时,Oracle不会将数据块插入新数据行(假设该数据块的可用空间已低于PCTFREE限制)。

PCTUSED的作用
PCTFREE和PCTUSED如何一起工作

对PCTFREE和PCTUSED共同作用可以优化数据块空间的使用(数据块)。

使用PCTFREE和PCTUSED参数管理数据块的可用空间
上述数字表明,PCTFREE和PCTUSED共同管理数据块空间的使用(数据块)。

在第一步中,当数据块占用的空间比小于80%,新的数据可以插入,因为PCTFREE参数限制20%个自由空间用于块中的现有数据更新。在第二步中,数据块中的保留空间可用于在数据块的数据更新,新的数据只能插入到数据块时,入住率低于40%,在第三步中,当块中的占有率小于40%,数据块可以被用于插入新的数据。在第四步中,当数据块占用的空间比小于80%,新的数据可以插入,因为PCTFREE参数限制,20%的可用空间必须保留块中的现有数据更新。这个过程是如此往复。

在新分配的数据块(数据块),空间可用于插入(INSERT)数据等于数据块减去数据块的总体积(开销),然后减去保留的可用空间(PCTFREE),数据块中的所有可用空间可以由在更新数据块使用现有数据。因此,更新操作可以使PCTFREE限制在可用空间内的数据块,因为这些空间是留给更新操作。

在每个数据段(数据段)和索引段(索引段),Oracle管理一个或更多的可用块列表(自由列表),其中列出了所有属于这个时期的数据扩展(的程度),一个数据块的可用空间大于合格PCTFREE的比例。这些块可以通过使用插入(插入)操作。当用户提交INSERT语句,Oracle选择从可用块列表数据的第一个有效的块,如果数据块的可用空间不够容纳INSERT语句提交的数据,以及块的占用容量已经超过PCTUSED的限制,Oracle将删除它从可用块列表。一段可以使用多个可用标签块列表,同时减少并发插入竞争(并发插入)在桌上。

当用户提交一个DELETE或UPDATE语句,Oracle处理语句并检查是否在相关的数据块占用空间比例小于PCTUSED。如果满意,数据块放在可用块列表的头(自由列表)是被用来在当前事务(交易)。如果当前事务需要写入数据,则将首先使用块。当提交事务时,此数据块中可用的空间也可以由其他事务使用。

相关文章

PHP数组函数序列的每一个()在数组的

PHP数组函数序列的每一个()在数组的

指针,数组函数,数组,元素,序列,每个()定义和用法 (每个)数组函数生成一个由当前内部指针元素数组组成的键名和键组件,以及内部指针向前移动。 四个元素包含返回数组键的元素:0, 1、key和值。键包含一个单元0和单元1键的数组,而值包含数据。 如果…

win7不识别光驱不能读解

win7不识别光驱不能读解

光驱,识别,电脑软件,点评:Win7无法识别光驱不能读取的现象。你一定见过它。这里有一个解决方案给你。有兴趣的朋友可以参考一下。 在Windows 7中禁用ALPM功能。要禁用此功能,打开命令提示符,输入下列依次为一个命令: powercfg.exe - setacvalu…

PHP面向对象的详细解决方案

PHP面向对象的详细解决方案

解决方案,面向对象的,详细,电脑软件,PHP,对象的三个主要特征 物体的行为:动作可以应用到物体上,光线被打开,而光是行为。 对象的形式:当方法被应用时,对象是对象如何响应,颜色,大小和形状。 对象表示:对象的表示相当于身份证,它是相同行为和状态之间…

哪里是Win8.1UpdateWin8免费Win8.1

哪里是Win8.1UpdateWin8免费Win8.1

应用商店,电脑软件,点评:这当然是最好看的免费更新在Windows应用程序的首页显眼的位置,但是如果你找不到Win8.1更新为了给大家组织一个导游,希望对朋友有所帮助。 微软已经推出Windows 8.1更新到win8用户通过Windows应用商店。如果你可以看到…

工艺文件的mouse.exe鼠标的过程是

工艺文件的mouse.exe鼠标的过程是

鼠标,文件,是怎样,过程,工艺,评论:详细的介绍了mouse.exe过程 进程文件:鼠标或mouse.exe 过程名称:未知主机进程 过程类别:安全风险的过程 英文描述: mouse.exe是一个未知的主机进程已报道,被,也被称为以下三个方面。 中文参考: 对不起,暂时没有中…

什么过程kencron过程查询kencron.e

什么过程kencron过程查询kencron.e

查询,过程,电脑软件,kencron,exe,评论:kencron.exe是一个代理服务器软件相关的过程 进程文件:kencron或kencron.exe 进程名称:AVM Ken服务器kencron 过程类别:安全风险的过程 英文描述: kencron.exe是一个代理服务器的应用。这个程序是非必需…

如何安装Windows8.1Win8.1系统重装

如何安装Windows8.1Win8.1系统重装

系统重装,安装,过程,电脑软件,点评:在日常使用过程中,Windows必然会出现崩溃或故障的情况,此时重装系统就能解决问题,下面的小系列将带大家学习使用Windows 8.1系统重装程序,感兴趣的朋友可以看看。 2013,很多品牌都预装了Windows8系统,相信接触Wi…

WIN7系统电脑前箱接口不能用(解决方

WIN7系统电脑前箱接口不能用(解决方

系统,解决方案,接口,不能用,电脑软件,问题: 电脑换上新的串口硬盘,旧的XP系统更换Win7系统,在成功安装后,发现使用前置扬声器接口。小盒子已经放在说话者的界面前沿。它在系统安装前被正常使用,但现在不能使用了。 答案uff1a 起初,人们认为声卡…

XP系统文件损坏快速恢复小技巧

XP系统文件损坏快速恢复小技巧

恢复,系统文件,损坏,小技巧,快速,评论:如何快速修复损坏的XP系统文件,想必很多朋友都有一半的知识吧。这里有个好办法。你可以试着操作它。 具体方法: 在WindowsXP的安装磁盘中,搜索损坏的文件。We should notice that the last character of…

oracle表空间表分区详细解决方案及

oracle表空间表分区详细解决方案及

表分区,表空间,解决方案,查询,详细,本文从以下几个方面对分区表的概念和操作进行了整理: 1的概念。表空间和分区表 2的具体作用。表分区 3的利与弊。表分区 4的几种类型及操作方法。表分区 5。表分区的维护操作。 (1)表空间和分区表的概念 表…

MySQL#1062重复录入1关键

MySQL#1062重复录入1关键

关键,电脑软件,MySQL,最近,VPS在移动WordPress的时候已经进入数据库了。 # 1062重复录入1 '关键'主' 当时,我已经全部删除了原始数据,并没有办法向万能的百度。我发现我很长一段时间。ING的激活,O(一_即时测试,一个成功的O)哈哈。 现在,只要…

如何在WIN7立体窗口模式建立一个快

如何在WIN7立体窗口模式建立一个快

快捷方式,模式,建立一个,窗口,如何在,评论:叫win7立体窗口可以按快捷键Ctrl键+ Tab键窗口,窗口按住Ctrl +键,然后按Tab键找到你想要的东西,但有时不想用,可以创建快捷方式,具体步骤如下,有兴趣的朋友不要错过 我们通常所说的win7立体窗口,按下快捷…