磁盘结构Disk Architecture

  通过本文的学习,您将能够:

  • 描述动态服务器chunk与页结构

  • 解释页是如何在extent内分配的

  • 解释表extent与索引extent的不同之处

  • 描述chunk与 DBSPACES 之间的关系

  • 描述各类型chunk中的开销页

  • 描述 dbspace、blobspace、sbspace的结构

  • 使用oncheck 命令显示空间分配、tblspace使用情况与 index 使用情况的报告

  • 使用 onstat 显示 dbspace 与chunk信息

1. 物理磁盘空间单元:chunk

  chunk 是分配给服务器的磁盘单元或者物理空间单元。chunk可以是raw device(也称裸设备)、raw device的一部分、或 UNIX 文件(cooked file)。

  将一个chunk分配给服务器时,可以使用以下三个值来定义chunk:

参数  说明
Pathname路径名 文件路径名或chunk使用的raw device名。
Offset偏移量 从设备初始到设备读写的开始处的以KB为单位的物理距离。如果使用cooked file创建chunk,请使用 0 作为偏移量的值。非0偏移量仅在raw device上使用。
Size大小 以KB为单位的空间大小,在raw device中从偏移量开始分配,或用于chunk的 UNIX 文件的大小。

chunk限制

  服务器的逻辑限制为每个逻辑空间(dbspace、blobspace 或 sbspace)的最多有 32,767 个chunk,每个chunk的最大大小为 4 TB。

  您的操作可能对进程可以打开的文件数有限制,这个限制会取代服务器限制。

2. I/O 的基本单元:页page

1697425070689

  服务器使用的基本 I/O 单元称为页page。 页的大小随计算机不同而有差异且无法更改。

  在为表存储信息时,存储在特定页上的数据类型是同类的;也就是说,如果将数据行存储在页中,则该页中只包含数据行。如果将索引数据存储在页中,则该页中只包含索引数据。一个页中可以包含索引信息或者数据,但不能同时包含二者。某些页被指定用于管理目的。

页结构

  服务器中使用的所有页面都有一个数据结构,如下所示:

参数 说明
Page header页头 包含24字节的描述该页的信息。、
Timestamp(时间戳) 出现在页的末尾最后 4 个字节。时间戳用于确保页写入的有效性;如果两个时间戳不相等,这表示磁盘写入可能未完成。一些特定的页(例如,物理日志页)的时间戳值是不匹配的。
Slot table槽表 用于定位页上的单个行。槽表包含数据行存储在页中的偏移量以及行的长度。

页中剩余的空间可用来存储数据或索引信息。

2.1 页头结构

页头结构如下所示:

2.2 配置页的大小

  • 只允许普通、非关键的 dbspaces
  • 在 dbspace 创建期间指定
  • 页大小的缓冲池将按缺省配置自动创建
  • 可以用配置参数指定页大小来覆盖缺省值
  • 无法指定根数据库空间的页面大小(按平台缺省值)
  • 允许更有效地利用页
  • 必须是一个旧平台特定的页大小的倍数
  • Dbspace 大小必须能够被页的大小和数量整除
  • Onparams 实用程序用于添加缓冲池

  首次初始化数据库服务器时,将使用缺省页大小 2 KB(或 4 KB,具体取决于平台)创建根数据库空间。

  在root dbspace 之后,添加的任何 dbspace/chunk可以使用缺省页大小的倍数来作为page大小,页大小为 2K 到 16K 之间。root dbspace 及其所有子chunk的缺省页大小根据平台而定。若页对应的缓冲池尚不存在,则会自动创建一个缓冲池来保存指定大小的页面。

  数据chunk指定的大小必须能够被页大小整除。dbspace 中的所有chunk须有相同的页大小。

  BUFFERPOOL 配置参数用来给一个给定的页大小指定内存中 BUFFERS 数量,以及与缓冲池相关的LRUS、LRU_MIN_DIRTY、 LRU_MAX_DIRTY 值。

  onparams 实用程序有一个新的选项 -b ,此选项用来增加缓冲池。

3. 表的磁盘空间:Extent

  Extent是磁盘上物理连续页面的集合。表的空间以extent为单位进行分配。表的扩展数据块大小是在创建表时指定的。只有当表被删除或重组时,extent才会被删除。

  表的磁盘空间以extent 为单位进行分配。extent是连续的磁盘空间数量;当创建表时,为每个表指定该数值。每个表均有与其相关的两个extent大小:

参数 说明
EXTENT SIZE 为表分配的第一个extent大小。在创建表时分配第一个extent。
NEXT SIZE 添加到表的每个后续extent的大小。

  添加一个extent时,除了一个或多个位图页面外,extent最初是空的。当第一次分配的extent没有更多的空间(即所有页均已填满)时,则为表分配另一个extent;当此extent满时,再分配下一个extent,以此类推。

Tblspace

  给表分配的所有extent逻辑上组合在一起并称为tblspace 。一个extent内的空间保证是连续的,tblspace 所代表的空间可能不连续,因为如果空间允许,extent可以分布在整个设备上。

Extent大小

  一个extent最小为四页。在实际中不存在最大的限制(但要受最大块大小为 4TB的约束)。extent大小必须是系统页大小的偶数倍。计算表的extent的需求很重要。

  若 EXTENT SIZE 或 NEXT SIZE 在表创建时没有指定,则使用二者的缺省值 16K。

3.1 表Extent的内容

  extent包含所有维护表中数据所需的信息。组成extent的数据页有着不同的作用。

1697426195013

  • 位图页追踪extent中所有其他页。
  • 数据页存储表中每行的数据。
  • Remainder页存储超出一页的数据行的后面部分。
  • Blobpage存储 blob 数据。
  • 空闲页作为extent的一部分,但未被分配。

位图页

  位图页追踪extent中所有其他的页。所有的位图页均使用 4bits来定位一个单独的页。

数据页

  数据页存储表中每行的数据。每行数据由rowid来标识,rowid是一个4字节的整数,由页号和行的 slot 号组成。这样做实际上允许数据行在页内的物理位置可以改变,但保证 rowid 不变。通过改变槽项的内容,该行可以重新在页面上定位。槽号为不超过 255 的 1 字节无符号整数。这意味着页中最大行数不能超过 255,因为在槽项与页中的数据行之间存在一对一的对应关系。

Remainder页

  Remainder页存储超出一页的数据行的后面部分。Remainder页中的部分行通过正向指针 页相连。如果单个行占据了整个保留页,则它被称为大Remainder页。

Blobpage

  如果您选择将 blob 字段跟表数据存储在 dbspace 中而不是使用 blobspace,则extent中的blobpage将被分配用于存储 blob 数据。每一 blob数据都有一个存储在数据行中的 blobid 与之相关。blobid 用于定位extent中的 blob 数据。它由包含 blob数据 的页号与槽号组成。Tblspace blobpage可能包含来自不同 blob 列中的数据。如果 blob 数据的大小大于页的可用空间,则 blob 数据根据需要有可能分布在多个页上。这些页通过正向指针连接在一起。

空闲页

  空闲页是指已分配给extent但是又不含任何数据的页。这些页可用于各种目的。如果一个extent中的所有页均为空闲页也不会删除。只有当表被删除或重组时,extent才会被删除。

3.2 索引extent的内容


  数据库服务器将索引页存放在不同的 tblspaces 中,而不是跟它相关的表中。在extent内,单个索引页包含不同的数据类型。索引页可按如下分类:

位图页

  位图页追踪extent内的所有其他页面。它包含能够监控extent内每一页面的控制信息。所有位图页都使用 4 位来跟踪页面。

索引页

  索引页包含为表所创建的索引的数据。数据存储在索引页上的方式很像其存储在数据页中。每个索引条目由一个键值(包含索引字段串联数据的字符串)和一个或多个 rowid 值组成。Rowid 是一个指针,指向包含该键值的行。对于唯一索引,每个键有且只有一个关联的 rowid。对于重复索引,一个给定的键可以有很多 rowid。因此,索引条目可能长短不一。

空闲页

  空闲页是分配给extent但尚未指派给任何数据的页面。这些页面可以用作索引页或位图页。即便extent内所有页面均为空闲页,该extent也不会被删除。只有当表格被删除或重组时,extent才会被删除。

3.2.1 B+ 树索引

1697427664361

  服务器使用 B+ 树结构实现索引。B+ 树为多途径检索树。给定一个键值便在树中搜索,一直到寻求的键值被发现。与键值一同储存的是数据行的 rowid(重复索引时为 rowids),也具有相同的键值。

根节点

  因为 B+ 树必须能够处理可变数量的键值,因此它必须具有能力生长。随着 B+ 树生长,新的节点 也会增加。节点为固定大小的数据结构,并包含有键(指针)对。最初,B+ 树中有一个单一的节点。这个起始节点称为根节点 。B+ 树中的所有搜索都从根节点开始。

叶节点

  当根节点占满时,必须添加一个新的节点来处理其他的键。由于搜索将从根节点开始,因此,增加一个节点就必须添加 B+ 树的新一级。新级别中对应着根节点的每一个键都有一个节点。根节点的 ptr 值不再指向行,而是指向新的节点。新节点中的每个键都有 ptr 值,即为 rowids。这些节点现在便是 b± 树搜索中的终点,被称为叶节点

分支节点

  b+ 树满时,新的一级也将占满。如果新的一级变满,便会再增加新的一级。根节点与叶节点之间的节点称为分支节点

3.3 Extent增长

  特殊情况会对后续即将分配的extent大小进行改变,使之后续分配的extent大小不同于表创建时的指定大小。

串联

  当此次分配给一个表的extent与其上一次分配给该表的extent在物理上与逻辑上都连续时,extent串联便会发生。现有的extent被扩展开并包含下一个extent大小所定义的空间量。这种情形常见于执行表的批量加载。在此过程中,被分配的每一个新extent将紧接着前一个extent。大批量加载新创建的表,可能会导致一个表只用一个大的extent。

倍增

  当分配给某一特定表的extent数量增长到 16 的倍数(16,32,48,64,80,96,112,128…)时,extent大小倍增的情况便会发生。每隔一定时间,用于后续extent的下一个大小便会增加一倍。

手动修改

  第一个extent和后续extent的大小是在表创建时指定的。使用 ALTER TABLE 命令可以改变extent的大小。您可以为任何后续extent增大或减少extent大小。当前表已分配的extent大小则不能被改变。

空间限制

  如果 dbspace 中的连续可用空间量低于当前extent分配的大小,系统将会把最大的连续可用空间分配给该extent。下一个extent大小值不会被改变。

4. Extent 的逻辑集合:Tblspace

  Tblspace 是在一个 dbspace 中所有分配给一个特定的表或索引进行存储信息的extent的集合。
  一个 tblspace 包含一个或多个extent。
  以 tblspace 为代表的空间不一定是连续,但任何一个extent所代表的空间都是连续的。

  以下顾客 表的 tblspace 由三个extent组成。
1697427868526

Tblspace 位于 Dbspace

  Tblspace 是在一个特定的 dbspace 中的,包含单个表的数据页或索引页。索引页和数据页存储在不同的 Tblspaces 中。如果表被分片 ,那么表的数据页可以位于多个 dbspaces 的 tblspaces 中。

  当创建表或索引时,可以指定 dbspace 或 dbspaces的位置以决定tablespace在哪里生成。

5.Chunk的逻辑集合:Dbspace

  dbspace 是用来存储数据库和表的一个或多个chunk的逻辑集合。每个dbspace 必须至少有一个分配的chunk;这就是所谓的初始 chunk 。必要时,dbspace 可以被分配尽可能多的chunk。如果一个特定的 dbspace 空间都用完了(因为分配给它的所有chunk都满了),可以向它添加额外的chunk。

  数据库和表是创建在dbspace中的。这意味着,表或数据库只能增长到与 dbspace 中的可用空间一样大。您不能在一个特定的chunk中创建数据库或表;如果要确保表或数据库创建在某个特定的物理设备上,可以只把该特定物理设备的chunk分配给该 dbspace。

Root Dbspace

  每个服务器必须有至少一个 dbspace,即 root dbspace 。这是控制服务器的所有系统信息所在的位置。不推荐将数据库和表存储在root dbspace 中。

Dbspaces 限制

  对于每个数据库服务器,逻辑上限制为最多有2047个dbspaces。

6. Chunk的逻辑集合:Blobspace

  Blobspaces 是专用于存储 BYTE和 TEXT数据类型的chunk的逻辑集合。

  当在服务器中使用 BYTE和 TEXT数据类型时,您可以选择将其置于blobspaces 中。Blobspaces 与 dbspace 的相似之处是都由块组成。不同的是,blobspaces 并不存储行和索引页,而是专用于存储简单大对象。blobspace 可以为一张或多张表保存 blobs,就像 dbspaces 可以为一张或多张表中保留 tblspaces。

  当blobspace被创建 时,blobspace 中所有 blobpages 的大小也就被指定了。因此,在 blobspace 中所有 blobpages 大小都是一致的。将简单大对象存储在 blobspaces 中通常更为有效,这是因为 I/O操作并不是以单个服务器页,而是以一组页来完成的。

无缓冲池

  Blob 值更新时,其原始值将一直保留在磁盘上,直到关联的逻辑日志文件被备份到磁带上。这是有必要的,因为在缓冲池中 blob 值并未缓冲,并且他们也未在磁盘上被写入逻辑日志。因此 blob 值被更新时,有必要在磁盘上拥有足够的可用空间,来保留值的两个副本:原始值和更新后的值。所以,在创建 blobspaces 时为这种系统开销提供空间是很重要的。

  注意:如果您打算使用高可用性数据复制 (HDR),您需要将简单的 blob 存储在 dbspace 中而非 blobspace 中。HDR 不会复制位于 blobspaces 的 blobs。

6.1 Blobpages

1697428133651
  在构成 Blob 页的各个页面上使用单个 Blobpage页头,而不是普通的page header 。这意味着 Blob 页上有更多的空间容纳 Blob 数据。

  Blob 页是存储在 Blob 空间中的 Blob 数据类型的基本存储单元。可以将 Blob 页的大小配置为系统页大小的倍数;也就是说,单个 Blob 页可以由多个系统页组成。由于 Blob 页分配为连续空间,因此将 Blob 数据类型存储在尽可能接近 Blob 数据大小的 Blob 页中会更有效。这可以减少读取 Blob 所需的 I/O 量。

  存储 Blob 时,将根据需要分配任意数量的 Blob 页来保存该 Blob 值。换句话说,磁盘上的 Blob 值可以分布在许多 Blob 页上。只有单个 Blob 页中的空间才能保证是连续的;如果需要多个 Blob 页来存储 Blob 值,则整个值可能不会存储在连续的磁盘空间上。

6.2 Blobspace组织

  blobspace 中的空间跟dbspace相比是以不同的方式组织的。每个chunk中分配有两种类型的free map页。第一种是 blobpage free map页 ,用于跟踪每个 blobspace chunk中的单个blobpage面。第二种是 blobpage free map空闲列表 free list ,是个 2 位(bits)的位图页,可跟踪chunk中的所有 blobpage free map页。

  当数据库服务器进程需要使用一些 blobpages 来存储数据时,它首先检查 blobpage free map空闲列表页,找到跟踪空闲blobpage的 blobpage free map页。接着读取该 blobpage free map页,找到实际的空闲blobpage。这种双引用使得寻找空闲blobpage更加迅速。

6.3 Blobspace Free Map

  在 blobspace 内,blobpages 的分配被记录在名为blob free map 的表中。它记录每一页的状态 (freein-use ) 以及逻辑日志的唯一 ID 编号,ID 号包含了定义该页内容的事务。

  当新的 blob 必须填满时,服务器将检查 blobspace free map,来确定 blobspace 内的下一个空闲页的所在位置。

  blobspace free map总是以 blobspace chunk中的第一页(第 0 页)开始。跟踪chunk中所有可容纳的blobpages需要很多的blob free map页。每个 blobpage 需要一个 8 字节的结构来跟踪。这种结构存储在 blobspace free map中。一个 blobpage free map页可跟踪的 blobpages 数量为︰

PAGESIZE – (28 * overhead) / 8

  分配给 blobspace 中chunk的 blobpages 数量等于chunk大小除以blobpage 大小。

oncheck -pP

  可以使用oncheck -pP 命令将展示 blobspace free map页的内容。

7. Chunk的逻辑集合:Sbspace

  Sbspaces 是专用于存储 BLOB、CLOB和用户自定义类型的chunk的逻辑集合。

  Sbspace 是数据库服务器用来存储表中智能大对象字段的一个或者多个chunk组成的逻辑存储单元。这些对象包含 BLOB(二进制大对象)、CLOB(字符型大型对象)数据类型或用户定义的数据类型 (UDT)。

7.1 Sbspace Extent

  sbspace Extent 由连续的智能大对象数据页集合组成。智能大对象页具有与标准系统数据页相同的大小和格式。

1697435971915

7.2 Sbspace Chunk布局

  最初创建 sbspace 时,sbspace 包含chunk头数据、元数据和用户数据。Sbspace 的第一个chunk总是包含53 页chunk头。后续的chunk仅包含 3 页保留信息。

  元数据总是存储在 sbspace 的第一个chunk。为优化访问时间,缺省位置接近块的中部。元数据的位置和大小可以在sbspace创建时定义。元数据区域可以存储 sbspace 内一个或多个chunk的信息。一旦它被分配,元数据区域的大小或位置便不可更改。

  智能大对象页具有与标准系统数据页相同的大小和格式。chunk头页和元数据被分配之后仍剩余的任何空间都将被用于存储用户数据,即智能大对象。

7.3 单一Chunk Sbpace元数据区域

1697436187498

  一个 sbspace的第一个chunk独享四个区域:sbspace 描述符分区、chunk辅助分区和 1 级、2 级存档分区。您可以使用 oncheck -ps 命令来显示元数据区域中每一分区被分配的页数目。

8.系统开销

  分配给 dbspace 或 sbspace 的部分空间被用来跟踪系统信息。三种类型的信息都在该保留空间中维护。

系统信息

  系统信息是存放服务器通用信息的地方。因为root dbspace 要维护整个系统的相关信息,因此它比其它 dbspace 包含了更多系统信息页。root dbspace 初始chunk为系统信息分配有 12 页。其他所有chunk只为系统信息保留了 2 页。

chunk 空闲列表

  chunk空闲列表将跟踪chunk的未分配空间。分配到系统的每个chunk都有一页做为chunk空闲列表。

Tblspace tblspace

  第三类信息是 tblspace 跟踪信息;也就是指存在于 dbspace 中每一个 tblspaces 的信息。由于 tblspace 信息的存储方式与数据存储在 tblspace 中一致,因此它被称为tblspace tblspace 。它被分配到系统中创建的每个 dbspace 和 sbspace 的初始chunk中。在 rootdbs 中 tblspace tblspace 为 250 页,在所有其他 dbspaces 中为 50 页。若需要更多空间,在 tblspace tblspace 中将新增一个extent。

8.1 系统保留页

  root dbspace 中为系统信息保留了 12 页。第一页叫 PZERO (块上的第一页为 0 页),包含有关整个服务器的通用信息。第二页包含配置参数的副本。改变任一配置参数,也会同时改变 CONFIG 页。

  剩下的 10 页其实是 5个页对。这些页将交替使用,以避免向页面写入时可能发生的系统故障。这些页对是:

  • 检查点页包含与上一个检查点和系统中每个逻辑日志文件的相关信息。

  • Dbspace 页包含系统中所有 dbspace、blobspaces 和 sbspaces 的相关信息。

  • 主chunk(与镜像chunk形成对照)页面包含分配给系统的主chunk相关信息。

  • 镜像chunk页面包含有关镜像chunk的信息。

  • 存档页面包含使用 ontape 执行上次存档的相关信息。

oncheck -pr

  oncheck -pr 命令将展示系统保留页面的相关信息。

8.2 扩展的系统保留页

  12 个系统保留页面将跟踪有关服务器的信息。如果该服务器信息需要更多空间,那么在root dbspace 的其他地方将创建额外的系统保留页面。

   例如,如果您为您的服务器配置了 130 个chunk,前 13 个chunk描述符可能放在root dbspace 的前 12 个系统保留页的chunk页面中。(根据chunk路径名的大小,一个页面上chunk的个数将不同)。为保留其他的chunk描述符,服务器可能会分配另外 18 页或 9 个页对(9-1PCHUNK 页和9-2PCHUNK 页)。

oncheck -pr

   oncheck -pr 命令将打印有关保留页面的信息。

8.3 Chunk空闲列表

   chunk空闲 列表用于跟踪位于chunk内的可用空间位置。每个分配到服务器的chunk都有一个chunk空闲列表。

  可用空间从chunk中开始,空闲列表中的每个条目都包含chunk(以字节为单位)的偏移量,和可用空间的chunk大小。空闲列表最初占据单个页面,但当需要尽可能多的页面来跟踪chunk内空间时,空闲列表将增长。当chunk变得越来越碎片化(有很多小chunk的空闲磁盘空间),便需要更多条目来跟踪可用空间的每个chunk。这就意味着需要更多的空闲列表页。

8.4 Tblspace Tblspace

tblspace tblspace 将跟踪dbspace 中所有的 tblspaces。
1697437304886

  tblspace tblspace 用于跟踪 dbspace 内所定义的所有 tblspaces。最初,在 root dbspace 中 tblspace tblspace为 250 页,所有其他 dbspaces 为 50 页。tblspace tblspace 中的每一页都将用于跟踪位于 dbspace 内的一个 tblspace。如果最初分配的页面数量不够,便会分配额外的extent。

  每个 tblspace tblspace 的第一页都是 tblspace tblspace的位图页。

  tblspace tblspace 中任何一页都跟踪这 dbspace 中的一个 tblspace。该页面包含组成 tblspace 的extent数量、磁盘上每个extent的位置、为表创建的每一条索引的信息,和表本身的数据(行数、列数、用于数据的页数,空闲页面数量等等)。

  tblspace tblspace 中的第二页将跟踪其本身;也就是说,它包含 tblspace tblspace 本身的所有相关信息。第三页将跟踪database tblspace,也就是 dbspace 中所创建的数据库。其他页面将跟踪由用户创建的表。

  可以通过两个配置参数,来设置分配给 tblspace tblspace 的extent大小:TBLTBLFIRST, TBLTBLNEXT。默认值为0,由服务器自动进行配置。

  服务器将尽可能在 dbspace 的最早分配chunk中获得较大的extent,而且,必须大于最小值。

8.5 Database Tblspace

  root dbspace 包含一个特别的tablespace,称为database tblspace。这是一种内部的 tblspace,用于跟踪服务器中的所有数据库。它可以像任何数据库表一样增长。唯一的区别在于,任何用户不能访问该 tblspace。

  database tblspace 最初有四页,如果有需求,将会额外分配给它Extent(就像同任何 tblspace 一样)。

  database tblspace 包含识别在服务器上创建的任何数据库需要的所有信息。它跟踪数据库名称、数据库所有者(创建者)、创建的日期和时间,描述数据库日志模式的标志,和数据库系统目录表 systables 的 tblspace ID。

  当 DATABASE 语句提交时,服务器将在database tblspace 中查找该数据库名称,并为该数据库定位systables 表;紧接着,服务器就可以使用systables 来定位数据库中的其他任何表了。

  在oncheck –pe的输出里,数据库 tblspace是以sysmaster 数据库里的一张表sysdatabases形式出现的。欲从该oncheck 报告中辨识database tblspace,查找sysmaster:’informix’.sysdatabases

9. 逻辑日志文件

  磁盘上有固定数量的逻辑日志文件,它们被重复使用来完成所有数据库的事务日志记录。

  至少要有三个逻辑日志文件。缺省情况下,它们位于root dbspace。

1697438216071

  为进行事务处理,数据库服务器需要记录数据库自上次系统存档以来的所有更改。在SinoDB数据库服务器中,逻辑日志实际上是的一个或多个文件,叫做逻辑日志文件。这些文件存储在服务器的 dbspaces中。

日志DDL语句

  除了记录事务之外,系统也会使用逻辑日志记录其它的事件;所有的 DDL(数据定义语言)语句和检查点事件也会被记录下来。即使在任何数据库中都不使用事务,仍需要有逻辑日志文件。

日志文件的编号

  通过设置 LOGFILES 配置参数,可以指定最初要在服务器中创建的逻辑日志文件的数量。服务器会循环使用日志文件,因此当一个日志文件满了,日志记录就会切换到下一个日志文件。您可以配置最少3个、最多32,767个逻辑日志文件。逻辑日志文件必须至少有200KB。

初始定位在Root Dbspace

  数据库初始化时,逻辑日志文件会被创建在root dbspace中。初始化之后,逻辑日志文件可以被移入另一个dbspace。为提高性能,应该将逻辑日志文件和物理日志文件放在root dbspace之外的设备上。

10. 物理日志文件

   物理日志包含了已在共享内存池修改但尚未写入磁盘的页的前映像。
1697438333840

  物理日志是在服务器中为几个目的而保留的连续页块。其主要目的是用于容错恢复机制(即快速恢复)。在服务器联机进行 dbspaces 的备份时也需要物理日志。物理日志是任何服务器不可缺少的组成部分。

页面的前映像

  物理日志包含所有读入共享内存缓冲池并在随后修改的页面。物理日志能确保页面的初始状态副本存储在磁盘上。因为页面初始状态就是了修改之前的页面印像,所以它们就叫做前映像。 只有页面的第一次修改会使前映像写入物理日志。出现在下一检查点之前的相同页面的随后更改不会使页面的附加副本写入物理日志。

初始定位在根Dbspace

  数据库初始化时,物理日志文件会被创建在root dbspace中。初始化之后,物理日志文件可以被移入另一个dbspace。

  推荐将逻辑日志文件和物理日志放在独立的设备上以提升性能。