PARTIV-Oracle数据库存储结构-逻辑存储结构

news/2024/11/16 13:46:49/文章来源:https://www.cnblogs.com/crispy-bro/p/18428424

12.逻辑存储结构

12.1. 逻辑存储结构简介

Oracle数据库为数据库中的所有数据分配逻辑空间。数据库空间分配的逻辑单位是数据块、区间、段和表空间。在物理层面,数据存储在磁盘上的数据文件中(见第11章“物理存储结构”)。数据文件中的数据存储在操作系统块中。图12-1是物理和逻辑存储的实体-关系图。乌鸦脚符号表示一对多关系。

12.1.1. 逻辑存储层次结构

图12-2显示了表空间内数据块、区间和段之间的关系。在这个例子中,一个段有两个区间,存储在不同的数据文件中。

在最细的粒度级别,Oracle数据库将数据存储在数据块中。一个逻辑数据块对应于物理磁盘空间的特定字节数,例如,2 KB。数据块是Oracle数据库可以使用或分配的最小存储单位。

区间是一组逻辑上连续的数据块,为存储特定类型的信息而分配。在图12-2中,24 KB的区间包含12个数据块,而72 KB的区间包含36个数据块。

段是为特定数据库对象(如表)分配的一组区间。例如,员工表的数据存储在其自己的数据段中,而员工的每个索引都存储在其自己的索引段中。每个消耗存储空间的数据库对象都由一个单独的段组成。

每个段都属于且只属于一个表空间。因此,一个段的所有区间都存储在同一个表空间中。在表空间内,一个段可以包含来自多个数据文件的区间,如图12-2所示。例如,一个段的一个区间可能存储在users01.dbf中,而另一个区间可能存储在users02.dbf中。单个区间永远不能跨越数据文件。

12.1.2. 逻辑空间管理

Oracle数据库必须使用逻辑空间管理来跟踪和分配表空间中的区间。当数据库对象需要一个区间时,数据库必须有一种方法来查找和提供它。类似地,当对象不再需要一个区间时,数据库必须有一种方法来使空闲区间可用。Oracle数据库根据您创建的类型在表空间内管理空间。您可以创建以下类型的表空间:

■ 本地管理表空间(默认)
数据库使用表空间本身的位图来管理区间。因此,本地管理表空间有一部分被留作位图。在表空间内,数据库可以使用自动段空间管理(ASSM)或手动段空间管理(MSSM)来管理段。

■ 字典管理表空间
数据库使用数据字典来管理区间(见第6-1页的“数据字典概述”)。

图12-3显示了表空间中逻辑空间管理的替代方案。

12.1.2.1. 本地管理表空间

本地管理表空间在数据文件头部维护一个位图,以跟踪数据文件主体中的空闲和已使用空间。每个位对应一组数据块。当空间被分配或释放时,Oracle数据库会更改位图的值,以反映数据块的新状态。

以下图形是位图管理存储的概念性表示。头部中的1表示已使用空间,而0表示空闲空间。

本地管理表空间具有以下优点:
■ 避免使用数据字典来管理区间
如果在字典管理的表空间中,消耗或释放区间中的空间导致另一个操作消耗或释放数据字典表或撤销段中的空间,则可能会发生递归操作。
■ 自动跟踪相邻的空闲空间
通过这种方式,数据库消除了合并空闲区间的需要。
■ 自动确定本地管理区间的大小
或者,本地管理表空间中的所有区间可以具有相同的大小,并覆盖对象存储选项。
注意:Oracle强烈建议使用自动段空间管理的本地管理表空间。

段空间管理 是从包含段的表空间继承的属性。在本地管理表空间内,数据库可以自动或手动管理段。例如,users表空间中的段可以自动管理,而tools表空间中的段则手动管理。

自动段空间管理 ASSM方法使用位图来管理空间。位图提供以下优点:
■ 简化管理 ASSM避免了手动确定许多存储参数的正确设置的需要。只有一个关键的SQL参数控制空间分配:PCTFREE。此参数指定了为未来更新保留的数据块中的空间百分比(见第12-12页的“数据块中自由空间的百分比”)。
■ 提高并发性
多个事务可以搜索单独的空闲数据块列表,从而减少争用和等待。对于许多标准工作负载,使用ASSM的应用程序性能比使用MSSM的经过良好调整的应用程序性能更好。
■ 在Oracle实时应用集群(Oracle RAC)环境中空间对实例的动态亲和性
ASSM更有效,是永久性本地管理表空间的默认设置。

注意:本章假设在所有关于逻辑存储空间的讨论中都使用ASSM。

手动段空间管理 传统的MSSM方法使用一个名为空闲列表的链表来管理段中的空闲空间。对于有空闲空间的数据库对象,空闲列表跟踪高水位线(HWM)以下的块,这是已使用和尚未使用的段空间之间的分界线。随着块的使用,数据库根据需要将块添加到或从空闲列表中移除。
除了PCTFREE,MSSM还需要您使用SQL参数如PCTUSED、FREELISTS和FREELIST GROUPS来控制空间分配。PCTUSED设置了数据库将其添加到空闲列表的当前使用块中必须存在的空闲空间百分比。例如,如果您在CREATE TABLE语句中将PCTUSED设置为40,则意味着如果一个数据块中至少有40%的空间未被使用,该数据块就会被列入空闲列表。
作为示例,假设您向表中插入一行。数据库检查表的空闲列表以寻找第一个可用块。如果行不能放入块中,并且如果块中已使用的空间大于或等于PCTUSED,则数据库将该块从列表中移除并寻找另一个块。如果您从块中删除行,则数据库会检查块中现在已使用的空间是否小于PCTUSED。如果是这样,那么数据库将该块放置在空闲列表的开头。
一个对象可以有多个空闲列表。通过这种方式,多个会话对表执行DML操作时可以使用不同的列表,这可以减少争用。每个数据库会话在其会话期间只使用一个空闲列表。如图12-4所示,您还可以创建一个具有一个或多个空闲列表组的对象,空闲列表组是空闲列表的集合。每个组都有一个主空闲列表,管理组中的各个进程空闲列表。空闲列表的空间开销,特别是对于空闲列表组,可能会很大。

手动管理段空间可能会很复杂。您必须调整PCTFREE和PCTUSED以减少行迁移(见第12-16页的“链式和迁移的行”)并避免浪费空间。例如,如果段中每个已使用的块都只有一半满了,而PCTUSED是40,那么数据库不允许在这些块中的任何一个中插入新行。由于调整空间分配参数的困难,Oracle强烈推荐使用ASSM。在ASSM中,PCTFREE决定了是否可以将新行插入到块中,但它不使用空闲列表并忽略PCTUSED。

12.1.2.2. 字典管理表空间

字典管理表空间使用数据字典来管理其区间。Oracle数据库在为区间分配或释放重用时,会更新数据字典中的表。例如,当一个表需要一个区间时,数据库会查询数据字典表并搜索空闲区间。如果数据库找到空间,那么它会修改一个数据字典表并插入另一行。通过这种方式,数据库通过修改和移动数据来管理空间。

数据库在后台执行的SQL以获取数据库对象空间是递归SQL。频繁使用递归SQL可能会对性能产生负面影响,因为对数据字典的更新必须序列化。本地管理表空间(默认设置)避免了这种性能问题。

12.2. 数据块概述

Oracle数据库以称为数据块的单位管理数据库数据文件中的逻辑存储空间,数据块也称为Oracle块或页面。数据块是数据库I/O的最小单位。

12.2.1. 数据块和操作系统块

在物理层面,数据库数据存储在由操作系统块组成的磁盘文件中。操作系统块是操作系统可以读取或写入的最小数据单位。相比之下,Oracle块是一个逻辑存储结构,其大小和结构对操作系统是不可见的。图12-5显示操作系统块的大小可能与数据块不同。数据库请求数据是以数据块的倍数进行的,而不是操作系统块。

当数据库请求一个数据块时,操作系统将此操作转换成对永久存储中数据的请求。数据块与操作系统块之间的逻辑分离有以下含义:

■ 应用程序不需要确定磁盘上数据的物理地址。
■ 数据库数据可以在多个物理磁盘上进行条带化或镜像。

12.2.1.1. 数据库块大小

每个数据库都有一个数据库块大小。在创建数据库时,DB_BLOCK_SIZE初始化参数设置了数据库的数据块大小。该大小为SYSTEM和SYSAUX表空间设置,并作为所有其他表空间的默认值。除非重新创建数据库,否则无法更改数据库块大小。如果未设置DB_BLOCK_SIZE,则默认数据块大小取决于操作系统。数据库的标准数据块大小为4 KB或8 KB。如果数据块大小与操作系统块大小不同,则数据块大小必须是操作系统块大小的倍数。

12.2.1.2. 表空间块大小

您可以创建与DB_BLOCK_SIZE设置不同块大小的个别表空间。非标准块大小在将可传输表空间移动到不同平台时很有用。

12.2.2. 数据块格式

12.2.3. 数据块压缩

12.2.4. 数据块上是空间管理

12.3. 区概述

12.3.1. 区空间分配

12.3.2. 区空间的释放

12.3.3. 区空间的存储参数

12.4. 段概述

12.4.1. 用户段

12.4.2. 临时段

12.4.3. 回滚段

12.4.4. 段空间和高水位

12.5. 表空间概述

12.5.1. 永久表空间

12.5.2. 临时表空间

12.5.3. 表空间模式

12.5.4. 表空间文件大小

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

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

相关文章

第三周作业(海报)

我所选的主题是数字。运用数字王国的标题,吸引小学生的注意。学生们可以在数字王国中探索,从低年级的认识数字开始培养起对数学的兴趣,为以后的数学学习铺垫好坚实的基础。在本张海报中,我运用了文字、图片、插画、数字这三种素材,并且插画颜色丰富、且进校园生活和数字,…

解决pyinstaller打包后的程序有时卡住按回车才动

当CMD命令提示符出现卡住现象,只需通过鼠标操作解决:点击标题栏,右键选择属性,取消勾选快速编辑模式,即可避免输入回车才能继续的问题。 原因 快速编辑模式阻塞控制台输出 解决 鼠标移动至标题栏->单击鼠标右键->属性->取消勾选快速编辑模式

别再吹牛逼说什么零延迟了,不可能的事

关于流媒体推拉流延时的几点说明。经常看到一些流媒体相关的程序,号称零延迟,不用怀疑,这肯定吹牛逼的。 搞音视频开发,有个核心的指标就是实时性,也就是延迟多少毫秒,这个问题问的也是最多的。 音视频文件几乎不存在实时性问题,只有音视频流才有实时性的指标。 延迟多久…

css的属性选择器使用

感谢 https://www.runoob.com/css/css-attribute-selectors.html 的底部评论 https://www.runoob.com/cssref/css-selectors.html 虽然一直有用到属性选择器,但是缺乏全面的了解,都是用到了就百度,看到一个大佬的总结评论,做个记录 CSS 属性选择器 ~=, |=, ^=, $=, *= 的区别 …

AdEMAMix: 一种创新的神经网络优化器

这是9月发布的一篇论文,Pagliardini等人在其论文中提出了一种新的优化算法——AdEMAMix。这种算法旨在解决当前广泛使用的Adam及其变体(如AdamW)在利用长期梯度信息方面的局限性。研究者们通过巧妙地结合两个不同衰减率的指数移动平均(EMA),设计出了这种新的优化器,以更…

Vue 基本使用

基本使用,组件使用❗必须要会! 高级特性 不常用,但可以体现你的知识深度 Vuex 和 Vue router❗重要 考察频率高面试题👇1. 指令 插值computed和watchcomputed的值没变,会缓存起来 watch 深度监听: deep: true,有子属性会遍历下去。 class和style 动态属性、驼峰写法条件…

绘制印章的开源工具DrawStampUtils使用

最近写了一个绘制印章的工具DrawStampUtils,具有比较完整的印章修改效果,定制化度较高,git地址(https://github.com/xxss0903/drawstamputils),也可以在npmjs中搜索DrawStampUtils即可// 将要绘制的canvas组件的引用传入,还有就是对应的毫米转像素的大小传入即可const sta…

从零开始学机器学习——什么是机器学习

机器学习作为人工智能的重要组成部分,通过算法自动发现数据中的模式和规律,从而使我们能够做出预测和决策。在学习过程中,我们强调了重要的关键词汇和步骤,包括训练数据集、模型、训练方法和调优过程。这个系列的文章旨在为初学者提供机器学习知识,避免使用专业术语和复杂…

Spark(八)SparkSQL概述

概述Hive是将SQL转为MapReduce SparkSQL可以理解成是将SQL解析成:“RDD+优化”再执行 SparkSQL可以简化RDD的开发,提高开发效率,且执行效率非常快 Spark SQL为了简化RDD的开发,提高开发效率,提供了2个编程抽象,DataFrame和DataSet,类似Spark Core中的RDD1. SparkSQL特点易…

Linux C++ 开发10 - 手把手教你使用valgrind性能分析工具

1. 什么是valgrind? 2. (Ubuntu)安装valgrind 3. valgrind工具的使用3.1. 命令的语法格式 3.2. 工具选项 3.3. LOG信息输出 3.4. Demo演示《Linux C++ 开发9 - 手把手教你使用gprof性能分析工具》一文中,我们讲解了gprof工具的使用方法,本文将继续讲解valgrind工具的使用方法…

js DOM学习的综合样例

js DOM学习的综合样例 本人简单学习了一点md语法,写出来的博客会更好看喵. 样例介绍 主要实现利用DOM的获取标签对象的功能和对监听功能实现三个功能:(1)开灯,关灯(2)对标签进行全选,反选(3)对文本框聚焦时字母为大写,反之为小写基本实现方法(1)开灯关灯:a.用img标签贴图关灯的…

救园最后7天:「坚持你所相信的,相信你所坚持的」

从7月15日开始的救园还剩最后7天,很有希望,也很紧张,能否救园成功,取决于最后7天有多少园友出手相救。前二十年,我们选择了「坚持我们所相信的」,相信真心为开发者服务,一定会有出路,我们坚持了下来。在第二十年遇到最大难关时,我们选择了「相信我们所坚持的」从7月15…