数据块概述

数据块概述Oracle数据库以称为数据块的单元(也称为Oracle块或页)管理数据库数据文件中的逻辑存储空间。数据块是数据库I/O的最小单位。数据块和操作系统块在物理级别,数据库数据存储在由操作系统块组成的磁盘文件中。操作系统块是操作系统可以读取或写入的最小数据单位。相反,Oracle块是一种

大家好,欢迎来到IT知识分享网。

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

 

 

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31835.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信