首页 > 其他分享 >数据块概述

数据块概述

时间:2022-10-01 17:22:08浏览次数:77  
标签:存储 操作系统 数据库 概述 Oracle 格式 数据

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

数据块和操作系统块

在物理级别,数据库数据存储在由操作系统块组成的磁盘文件中。

操作系统块是操作系统可以读取或写入的最小数据单位。相反,Oracle 块是一种逻辑存储结构,其大小和结构对于操作系统来说是未知的。

下图显示操作系统块的大小可能与数据块不同。数据库请求多个数据块中的数据,而不是操作系统块。

 数据块和操作系统块

 

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

  • 应用程序不需要确定磁盘上数据的物理地址。

  • 数据库数据可以在多个物理磁盘上进行条带化或镜像。

数据库块大小

每个数据库都有一个数据库块大小。

DB_BLOCK_SIZE初始化参数设置数据库创建时的数据块大小。大小是为SYSTEMSYSAUX表空间设置的,是所有其他表空间的默认值。除非重新创建数据库,否则无法更改数据库块大小。

如果DB_BLOCK_SIZE未设置,则默认数据块大小是操作系统特定的。数据库的标准数据块大小为 4 KB 或 8 KB。如果数据块和操作系统块的大小不同,则数据块大小必须是操作系统块大小的倍数。

表空间块大小

您可以创建块大小与DB_BLOCK_SIZE设置不同的单个表空间。

数据块格式

每个数据块都有一个格式或内部结构,使数据库能够跟踪块中的数据和可用空间。无论数据块包含表、索引还是表簇数据,这种格式都是相似的。

下图显示了未压缩数据块的格式。

 

 

数据块开销

Oracle 数据库使用块开销来管理块本身。块开销不可用于存储用户数据。

如“数据块格式”所示,块开销包括以下部分:

  • 块头

    这部分包含有关块的一般信息,包括磁盘地址和段类型。对于事务管理的块,块头包含活动和历史事务信息。

    每个更新块的事务都需要一个事务条目。Oracle 数据库最初在块头中为事务条目保留空间。在分配给支持事务更改的段的数据块中,空闲空间也可以在标头空间耗尽时保存事务条目。事务条目所需的空间取决于操作系统。但是,大多数操作系统中的事务条目大约需要 23 个字节。

  • 表目录

对于堆组织表,此目录包含有关其行存储在此块中的表的元数据。在一个表簇中,多个表可以在同一个块中存储行。

  • 行目录

于堆组织表,此目录描述了块的数据部分中行的位置。数据库可以在块底部的任何位置放置一行。行地址记录在行目录向量的槽之一中。

rowid 指向特定的文件、块和行号。例如,在 rowidAAAPecAAFAAAABSAAA中,finalAAA表示行号。行号是行目录中条目的索引。行目录条目包含指向数据块上行位置的指针。如果数据库在块内移动一行,则数据库更新行目录条目以修改指针。rowid 保持不变。

数据库在行目录中分配空间后,数据库在删除行后不会回收该空间。因此,当前为空但以前最多有 50 行的块继续为行目录分配 100 个字节。仅当会话在块中插入新行时,数据库才会重用此空间。

块开销的某些部分大小是固定的,但总大小是可变的。平均而言,块开销总计 84 到 107 个字节。

行格式

块的行数据部分包含实际数据,例如表行或索引键条目。正如每个数据块都有一个内部格式一样,每一行都有一个行格式,使数据库能够跟踪行中的数据。

Oracle 数据库将行存储为可变长度记录。一行包含在一个或多个部分中。每个部分称为一个排片。每个行块都有一个行标题和列数据。

行片段的格式

 

 

行标题

Oracle 数据库使用行标题来管理存储在块中的行片段。

行标题包含如下信息:

  • 行片中的列

  • 位于其他数据块中的行片段

    如果可以将整行插入到单个数据块中,则 Oracle 数据库将该行存储为一行。但是,如果无法将所有行数据插入到单个块中,或者更新导致现有行超出其块,则数据库将该行存储在多个行块中。一个数据块通常每行只包含一个行块。

  • 表簇的簇键

完全包含在一个块中的行至少有 3 个字节的行头。

列数据

在行标题之后,列数据部分存储行中的实际数据。CREATE TABLE行块通常按照语句中列出的顺序存储列,但不能保证这种顺序。例如,LONG最后创建类型的列。

如“行格式”中的图所示,对于一行中的每一列,Oracle 数据库分别存储列长和数据。所需空间取决于数据类型。如果列的数据类型是可变长度,则保存值所需的空间会随着数据的更新而增长和缩小。

每行在数据块头的行目录中都有一个槽。插槽指向行的开头。

行格式

Oracle 数据库使用rowid来唯一标识一行。在内部,rowid 是一种结构,它保存数据库访问行所需的信息。rowid 不是物理存储在数据库中,而是从存储数据的文件和块中推断出来的。

扩展的 rowid 包括数据对象编号。此 rowid 类型对每一行的物理地址使用 base 64 编码。编码字符为A-Za-z0-9+/

 ROWID 伪列

以下示例查询ROWID 伪列以显示employees表中员工 100 的行的扩展 rowid:

SQL> SELECT ROWID FROM employees WHERE employee_id = 100;
 
ROWID
------------------
AAAPecAAFAAAABSAAA

ROWID 格式

 

 数据块压缩

数据库可以使用表压缩来消除数据块中的重复值。本节介绍使用压缩的数据块格式。

使用基本表和高级行压缩的数据块的格式与未压缩的块基本相同。不同之处在于块开头的符号表存储行和列的重复值。数据库将这些值的出现替换为对符号表的简短引用。

压缩数据块的格式

假设以下行存储在七sales列表的数据块中:

2190,13770,25-NOV-00,S,9999,23,161
2225,15720,28-NOV-00,S,9999,25,1450
34005,120760,29-NOV-00,P,9999,44,2376
9425,4750,29-NOV-00,I,9999,11,979
1675,46750,29-NOV-00,S,9999,19,1121

当基本表或高级行压缩应用于此表时,数据库将用符号引用替换重复的值。以下压缩的概念表示法显示了符号*替换29-NOV-00和%替换9999:

2190,13770,25-NOV-00,S,%,23,161
2225,15720,28-NOV-00,S,%,25,1450
34005,120760,*,P,%,44,2376
9425,4750,*,I,%,11,979
1675,46750,*,S,%,19,1121

 

 

 

 

标签:存储,操作系统,数据库,概述,Oracle,格式,数据
From: https://www.cnblogs.com/wonchaofan/p/16747450.html

相关文章

  • 什么是数据填报系统?有专业的公司做吗?_光点科技
    什么是数据填报系统?数据填报是报表用以满足企业用户可以提出的灵活报送数据的需求,能快速发展开发各类信息数据采集系统的专业功能。多源填充模型可以实现数据的多源提取和多......
  • Overview of Database Link数据库链接概述
    什么是数据库链接?数据库链接是一个指针,它定义了从Oracle数据库服务器到另一个数据库服务器的单向通信路径。对于公共和私有数据库链接,链接指针实际上被定义为数据字典......
  • 第四篇-标准命令概述
    标准命令概述Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。build:用于编译给......
  • Spring MVC入门(四):域对象共享数据
    使用ServletAPI向request域对象共享数据#后端:向request域对象中添加数据,并转发到success页面@RequestMapping("/testServletAPI")publicStringtestServletAPI(HttpServle......
  • mysql基础(十一):数据类型
    起步数据类型数据类型的属性整数代码案例#创建数据表,指定字段类型CREATETABLEtest_int1(f1TINYINT,f2SMALLINT,f3MEDIUMINT,f4INTEGER,f5BIGINT);#插入没有超出范......
  • Spring03:展现模型数据、处理及校验表单
    1展现模型数据1.1图解过程在上一节“Spring-02:构建并运行基础Spring应用”中,我们运行的基础应用所展现的视图home.html还未包含任何领域类的信息,如下图:想要构建真实......
  • 【SQL数据库】(二)关系模型与关系代数
    二.关系模型与关系代数2.1关系模型2.1.1关系数据结构1.关系:二维表就是关系;行对应关系的一个 元组,列对应关系的一个域(域名=属性名)2.关系数据库:表的集合,关系的集......
  • H2 数据库的 expected "identifier 错误
    尝试使用H2数据库创建表,但是老是提示expected"identifier这个错误。  问题和解决经过搜索后才知道,上面的错误是因为我们使用的表名USER是H2的关键字。H......
  • 我们一起聊聊分布式数据服务
    MySQL本身不是分布式系统,其支持的数据复制技术,本质上是为了数据容灾使用,但目前基于主从复制进行读写分离,减少单机的读压力。目标数据存储资源是系统中最重要的组成部分,数据......
  • 1.Python环境与数据分析
    今天是科研能力提升强化培训的第一天,简单记录下培训过程一、安装软件1.安装python2.安装anaconda3.安装jupyternotebook4.安装pycharm二、numpy基础1.numpy的ndarr......