Dbspace布局 -- informix体系架构笔记

Dbspace布局 -- informix体系架构笔记

暗夜星空's Memory from May 19 , 2011 at 15:28 PM , under Category:INFORMIX教程数据库

目标 :服务器

一、  了解块(chunk)的布局;架构

二、  了解保留页结构;app

三、  了解块可用列表页(chunk free-list page)的用途;ide

四、  了解partition页的结构;布局

五、  了解partition number(partnum);post

六、  了解物理日志和逻辑日志结构;性能

 

root dbspace空间优化

    root dbspace是Informix数据库第一个且是重要的dbspace,它包含系统的第一个chunk(root chunk),跟其它dbspace同样,可为root dbspace增长附加chunk。因为root dbspace不能被删除,故应当显式地为其指定初始chunk。ui

最好不要把业务库放置于root dbspace上,而应该放置于特别指定的dbspace或者多个dbspace上,以使数据分布在多个磁盘上。

在初始化时,物理日志和最少3个逻辑日志均位于root dbspace上,在实际应用时,须要把它们移至独立的dbspace上以获取更好的性能。

 

root chunk布局

点击查看原图

保留页(reserved pages)

      root chunk前12页称为系统保留页,用于保存在检查点时更新的系统信息。从第三个保留页开始,页使用半冗余对方式,各半冗余对使用不一样的结构,半冗余对中的页交替保存最新的信息。oninit轮换读取半冗余对中页的信息,以确保数据库宕机未能写入半冗余对中的页时,另外一个页能够作为备份启动。

 

块可用列表页(chunk free-list page)

每一个chunk的系统保留页后的1页为块可用列表页,它包含该chunk里的空闲页信息。

 

Tblspace tblspace

Tblspace tblspace是描述dbspace内全部tblspace位置和结构的页的集合。每一个页都是相同的格式,包含如下主要组件:

区段的数量和位置;

字段的数量和描述;

一列索引键信息;

数据库名和表名。

Tblspace tblspace在root dbspace上的初始大小是250页。

 

Database Tblspace

Database tblspace 是一个包含系统中全部数据库的列表,包含如下组件:

数据库名(database name)

数据库全部者(database owner)

数据库建立时间

数据库在systables中的tblspace编号

数据库日志类型标识

查找database tblspace的物理位置,可使用oncheck -pe 命令,在输出的结果中,sysmaster:sysdatabases 的位置便是。

 

非root chunk布局

点击查看原图

 

Dbspace上的第一个chunk和其它chunk的区别仅仅是在dbspace创建时第一个chunk上含有50页的tblspace tblspace。Root dbspace的其它chunk布局与dbpsace中的其它chunk一致。

 

保留页(Reserved pages)

    非root chunk上的前2页为保留页,但未用。

 

块可用列表页(chunk free-list page)

    在全部的chunk上,在保留页以后的页是块可用列表页。

 

Tblspace tblspace

    每一个dbspace均包含tblspace tblspace(又称partition table)。Dbspace的第一个tblspace tblspace区段位于该dbpsace的第一个chunk上,tblspace tblspace亦跟其它表同样能够扩展。Tblspace tblspace的初始区段和扩展区段大小均是50页。

 

Root Reserved Page概述

点击查看原图

页0(page 0)

    页0包含Informix的版权信息,和系统初始化时间。

    可经过oncheck -pr 输出中的PAGE_PZERO部分或者oncheck -pP 1 0 查看该页信息。

 

参数配置页(configuration page)

    页1为参数配置页,包含上次服务器正常启动的系统配置文件信息。

    该页包含配置文件中绝大部分的参数和配置值,但有些合法的参数并未列出。

    可经过oncheck -pr输出中的PAGE_CONFIG部分或者oncheck -pP 1 1 查看该页信息。

 

检查点、日志页(checkpoint/logical log pages)

    页2和页3为第一个半冗余对,为检查点、日志页。当前检查点、日志页包含最后检查点的位置和时间、各逻辑日志的位置和状态。

    注意的是:冗余对中仅其中一个页是当前使用页,仅当前页损坏时才使用另外一页。故当咱们提到主chunk保留页、dbspace保留页或者检查点、日志保留页时,均是指冗余对中当前使用页。判断是不是当前页使用的是timestamp,使用oncheck -pr输出时,也是仅输出当前使用页。

    可经过oncheck -pr 输出中的PAGE_1CKPT & PAGE_2CKPT部分或者oncheck -pP 1 2 和oncheck -pP 1 3查看该页(对)信息。

 

  近似相同的半冗余对页(A Pari of Nearly-Identical Pages)

  以下图所示,检查点、逻辑日志信息均存在于两个页中。这两个页的信息的区别在于:当前页包含最新的信息,另外一个是以往的信息。(全部半冗余对均是这个差异)

  点击查看原图

 

检查点结构 与 检查点记录

区分检查点结构(位于 检查点、日志保留页)与检查记录这二者的区别很重要。

检查点记录是写到逻辑日志上的。检查点的最后一步便是将检查点记录写入到当前逻辑日志文件上。

在任什么时候刻,磁盘上的逻辑日志上能够存在多个检查点记录。但在这些记录中,只有最近的检查点对于快速恢复是重要的。在检查点、日志页上的检查点结构包含在系统关闭或者宕机后指引快速恢复至最重要最近的检查点记录的信息。

 

检查点结构

    Validating PAGE_1CKPT & PAGE_2CKPT...

          Using check point page PAGE_1CKPT.

 

    Time stamp of checkpoint       0x383e2

    Time of checkpoint             04/12/2011 11:34:13

    Physical log begin address     1:263

    Physical log size              25000 (p)

    Physical log position at Ckpt  1152

    Logical log unique identifier  5

    Logical log position at Ckpt   0x107e018 (Page 4222, byte 24)

    Checkpoint Interval            207

    DBspace descriptor page        1:4

    Chunk descriptor page          1:6

    Mirror chunk descriptor page   1:8

 

检查点时间戳:16进制,是检查点的最后时刻。检查点、日志页上的时间戳仅比检查点结构上的检查点时间戳大一点点。

 

检查点时间:实际的检查点时间。使用的是localtime()。

物理日志开始地址:DEC:DEC(chunk number:page offset),物理日志开始的位置。

物理日志大小:DEC,物理日志的大小,单位是页。

检查点时物理日志位置:DEC,检查点时物理日志位置指的是最后的检查时,物理日志相对于物理日志地址开始地址的偏移。快速恢复(fast recovery)的第一步便是物理恢复(physical recovery)开始于此(即:检查点物理日志位置)。从该页开始,物理日志上页的页完成时间戳(page-ending timestamp)大于检查点时间戳的页复制回它们正确的地址上(即,它们物理恢复)。物理恢复结束是在物理日志上全部页的页完成时间戳小于检查点时间戳。

 

逻辑日志惟一识别符:DEC,包含最近检查点记录的逻辑日志惟一ID。

 

检查点时逻辑日志位置(LOGPOS):HEX,在逻辑日志惟一识别符标识的逻辑日志上的具体位置。包含最近的检查点记录。

Dbspace描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前dbspace保留页地址。

Chunk描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前chunk保留页地址。

镜像Chunk描述页:DEC:DEC(chunk number:page offset),最后检查点使用的当前镜像chunk保留页地址。

 

逻辑日志文件结构

逻辑日志文件结构在 检查点、日志保留页中是同一种结构。

   Log file number                5

      Unique identifier              5

      Log contains last checkpoint:  Page 4236, byte 24

      Log file flags                 0x13       Log file in use

      &                                         Current log file

      &                                         Log written to archive tape

      Physical location              1:45263

      Log size                       5000 (p)

      Number pages used              4237

      Date/Time file filled          -

     Time stamp                     -

逻辑日志文件编号:DEC,逻辑日志文件在系统中的编号。

惟一识别符:DEC,逻辑日志惟一识别符。

包含最近检查点的逻辑日志:DEC,最近检查点记录的具体逻辑日志页号和字节偏移量

逻辑日志文件标识:HEX,使用逻辑或(OR),各单独标识的含义以下:

0x01    Log file in use

0x02    Current log file

0x04   Backed up

0x08  Newly added (archive required)

0x10   Log has been written to an archive tape

0x20   Log is a temporary log file

使用oncheck -pr输出中含有翻译结果。

 

逻辑日志物理地址:DEC:DEC(chunk number:page offset),该逻辑日志文件的开始物理地址。

逻辑日志大小:DEC,该逻辑日志文件的大小,单位是页。

逻辑日志已使用页数:DEC,该逻辑日志文件已经使用的页数。Informix恢复机制并不信任该值。

逻辑日志填充时间:DATE和TIME,基于localtime()。

时间戳标识:HEX,逻辑日志完成时的全局系统时间戳标识。

 

    逻辑日志惟一识别符 和 逻辑文件编号

          逻辑日志备份后得用逻辑日志文件,但使用新的识别符。

    点击查看原图

 

Dbspace页(dbspace pages)

页4和页5为第二个半冗余对,为dbspace页。当前dbspace页包含全部dbspace的状态、位置、数据和建立时间等。

Dbspace保留页结构

   Validating PAGE_1DBSP & PAGE_2DBSP...

          Using DBspace page PAGE_1DBSP.

 

    DBspace number                 1

    DBspace name                   rootdbs

    Flags                          0x40001    No mirror chunks

    Number of chunks               1

    First chunk                    1

    Date/Time created              01/31/2011 06:03:52

    Partition table page number    14

    Pagesize (k)                   2

    Logical Log Unique Id          0

    Logical Log Position           0x0

    Oldest Logical Log Unique Id   5

    Last Logical Log Unique Id     0

    DBspace archive status  

Archive Level            0

          Real Time Archive Began  04/11/2011 21:27:38

          Time Stamp Archive Began 172828

          Logical Log Unique Id    5

          Logical Log Position     0x942e4

 

Dbspace编号(dbspace number):DEC,dbspace编号,从1开始。

Dbspace名称(dbspace name):CHAR,dbspace名称。

标识(flags):HEX,dbspace标识。

标识,参考管理员参考大全里的onstat -d解释。

Flag       Value Description

0x00000000 Mirror not allowed and dbspace is unmirrored

0x00000001 Mirror is allowed and dbspace is unmirrored

0x00000002 Mirror is allowed and dbspace is mirrored

0x00000004 Down

0x00000008 Newly mirrored

0x00000010 Blobspace

0x00000020 Blobspace on removable media

0x00000040 Blobspace is on optical media

0x00000080 Blobspace is dropped

0x00000100 Blobspace is the optical STAGEBLOB

0x00000200 Space is being recovered

0x00000400 Space is fully recovered

0x00000800 Logical log is being recovered

0x00001000 Table in dbspace is dropped

0x00002000 Temporary dbspace

0x00004000 Blobspace is being backed up

0x00008000 Sbspace

0x00010000 Physical or logical log changed

0x00020000 Dbspace or chunk tables have changed

0x00040000 Dbspace or blobspace contains large chunk

0x00080000 Chunk in this dbspace has been renamed

0x00100000 Temporary dbspace used by only by shared disk secondary server. It is one of the dbspaces listed in the SDS_TEMPDBS onconfig parameter on the SD server.

0x00200000 Temporary dbspace for the shared disk Secondary server. This is listed in the DBSPACETEMP onconfig variable on the shared disk secondary server.

0x00400000 The DBspace was externally backed up.

 

包含chunk数(number of chunks): DEC,该dbpsace包含的chunk总数。

首chunk(first chunk):DEC,该dbspace的第一个chunk编号;

建立时间:(date/time created):datetime,该dbspace的建立时间;

Tblspace位置(Partition table page number):DEC,该dbspace的tblspace在chunk上的位置。

页大小(page size):DEC,该dbspace的默认页大小。

 

主chunk页(primary chunk pages)

页6和页7为第三个半冗余对,为主chunk页。包含全部主chunk的信息(路径、大小、偏移和状态等)。

主chunk保留页结构

Validating PAGE_1PCHUNK & PAGE_2PCHUNK...

          Using primary chunk page PAGE_1PCHUNK.

 

    Chunk number                   1

    Flags                          0x30040    Chunk is online

    Chunk path                     /opt/informix/dbs/rootdbs

    Chunk offset                   0 (p)

    Chunk size                     100000 (p)

    Number of free pages           40211

DBspace number                 1

 

Chunk编号(chunk number):DEC,chunk编号,从1开始。

Flags标识(flags):HEX,chunk标识。(有些flags并未找到相应的文档,参考dbspace的flags理解)

0x0010 Mirror chunk

0x0020 Chunk is off-line

0x0040 Chunk is on-line

0x0080 Chunk is being recovered

0x0100 Chunk is newly mirrored

0x0200 Chunk is belongs to a blobspace

0x0400 Chunk is being dropped

0x0800 Chunk is part of an optical stageblob

0x1000 Chunk is inconsistent with the rest of the system

0x2000 Chunk has been chained

0x4000 Chunk belongs to an subspace

Chunk路径(chunk path):CHAR,chunk文件路径。

Chunk偏移量(chunk offset):DEC,chunk开始位置相对于文件/设备的开始偏移量,单位是页。

Chunk大小(chunk size):DEC,chunk的大小,单位是页。

空闲页总数(number of free pages):DEC,块空闲页总数,单位是页。

所属dbpsace编号:(dbspace number):DEC,chunk所属的dbspace编号。

 

镜像chunk页(mirror chunk pages)

页8和页9为第四个半冗余 对,为镜像chunk页。其结构和主chunk页结构相同,保存全部镜像chunk的信息。

结构与主chunk页相同,仅chunk大小为0,镜像chunk不存在空闲页。

 

备份页(archive pages )

页10和页11(0xa和0xb)为第五个半冗余对,为备份页。保存服务器最近的备份信息。

备份保留页结构

Validating PAGE_1ARCH & PAGE_2ARCH...

          Using archive page PAGE_1ARCH.

 

    Archive Level                  0

    Real Time Archive Began        04/11/2011 21:27:38

    Time Stamp Archive Began       0x2a31c

    Logical Log Unique Id          5

Logical Log Position           0x942e4

 

备份级别(archive level):DEC,备份级别,仅0,1,2

备份开始时间(real time archive began):datetime,备份时检查点开始时间点,localtime()

备份开始时间戳(time stamp archive began):HEX,备份时检查点开始时间点的时间戳;

逻辑日志惟一ID(logical log unique id):DEC,包含备份时检查点记录的逻辑日志;

逻辑日志位置(logical log position):HEX,包含备份时检查点记录的逻辑日志上的具体位置;

 

块可用列表页(chunk free-list page)

每一个chunk都须要有个机制用于跟踪其上可用空间。在保留页后的一个页即块可用列表页(chunk free-list page),每一个可用列表条目(结构)包含两个元素:开始页,大小。

当分配页面时,从可用列表上减去空间,调整偏移;

空间回收(删除表,alter操做等)时,从可用列表项中增长空间,调整偏移,或者增长条目;

 点击查看原图

    附加的块可用列表页:

在第一个块可用列表页填充满后,须要附加的块可用列页。附加的块可用列表页以联接的方式与第一个块可用列表页联接,该联接仅是第一个块可用列表页与附加的块可用列表页之间的联接。

 

Tblspace tblspace(root dbspace上)

在每一个dbspace的初始chunk中,第一个块可用列表后的一块连续页称为tblspace tblspace(partition table)。Tblspace tblspace是用于描述dbpace上表信息的位置的页。Tblspace tblspace上的一个页用于描述tblspace tblspace自己(root dbspace上的0x100001描述tblspace tblspace自己,即将本身也看成一个表)。Tblspace tblspace上的页称为partition页(partition page)。

  点击查看原图

Partition编号(partnum)

以sysmaster:systables表的partnum为例:

        0x001 00002

        前3位(1.5字节)为001为dbspace编号,后5位(2.5字节)00002为逻辑页编号(tblspace blspace中的页)

 

      Partition页布局

每一个partition页均包含5个slot,

    点击查看原图

Slot 1:partition结构

Slot1存储的partition结构包含的是表的常规信息。

一些通用tblspace信息作为表统计信息存储于partition结构中,也存储于作为优化器使用的系统编目(system catalog)中。事实上,在一些update statistics操做中,一部分表partition页信息复制到系统编目中,另外一部信息则须要从tblspace页中获取。虽然系统编目中的信息在表增加的过程当中变成过时,但在partition页上的信息是准确的。然而,优化器(optimizer)仅访问系统编目中的信息,而不访问partition页中的信息。

可经过oncheck -pt database_name:table_name 或者oncheck -pt partnumber的方式查看其结构:

TBLspace Report for demodb:informix.t1

 

    Physical Address               2:527

    Creation date                  04/12/2011 20:54:28

    TBLspace Flags                 800901     Page Locking

                                              TBLspace contains VARCHARS

                                              TBLspace use 4 bit bit-maps

    Maximum row size               73        

    Number of special columns      3         

    Number of keys                 0         

    Number of extents              1         

    Current serial value           1         

    Current SERIAL8 value          1         

    Current BIGSERIAL value        1         

    Current REFID value            1         

    Pagesize (k)                   2         

    First extent size              8         

    Next extent size               8         

    Number of pages allocated      8         

    Number of pages used           2         

    Number of data pages           1         

    Number of rows                 1         

    Partition partnum              2097212   

    Partition lockid               2097212

物理地址(physical address):DEC:DEC,这个并非partition编号,也不是与tblspace区段相关。不一样于其它元素,物理地址并非partition结构的一部分。它是物理位置(chunk编号 和 偏移)。

建立时间(creation date):datetime,表的建立时间,localtime();

Tblspace标识(tblspace flags):DEC,该标识与页标识,dbspace标识,chunk标识相似,使用 逻辑或(OR)计算(有些flag没有相关信息)。

0x0001 Page-level locking

0x0002 Row-level locking

0x0004 Tblspace is a Bundlespace (OnLine secure)

0x0008 Partition marked for DDR replication

0x0010 Partition dropped (shared memory only)

0x0020 System-defined temporary table

0x0040 User-defined temporary table

0x0080 Tblspace used for sorting

0x0100 Contains VARCHAR column(s)

0x0200 Contains BLOBspace BLOB column(s)

0x0400 Contains partition-resident BLOB column(s)

0x0800 Requires 4-bit bitmap

0x1000 Contains optical BLOB column(s)

0x2000 Partition required for system to function - do not drop

0x4000 Temp table being used for special function - do not update bitmaps

0x8000 Partition is being appended to

行最大大小(Maximum row size):DEC,行的最大大小,在包含varchar字段时,每一个varchar字段须要增长1个字节。

特殊字段数(Number of special columns):DEC,blob和varchar的字段个数;

键(索引)数(Number of keys):DEC,键(索引)数;

区段总数(Number of extents):DEC,分离的区段总数;

当前序号(Current serial value):DEC,使用了serial字段时,当前的序号;

当前序号8(Current SERIAL8 value):DEC,使用了serial8字段时,当前的序号;

当前大序号(Current BIGSERIAL value):DEC,使用了bigserial字段时,当前的序号;

当前REFID号(Current REFID value):DEC,使用了refid字段时,当前的序号;

页大小(Pagesize (k)):DEC,表的页大小;

首区段大小(first extent size):DEC,表的第一个区段大小,首区段最小为4页,默认为8页。或是在建表的时候指定的大小。

下一区段大小(next extent size):DEC,当前表的下一区段大小;

已分配页总数(Number of pages allocated):DEC,全部区段页的总数;

已使用页总数(Number of pages used):DEC,已分配页中已使用页的总数;

数据页总数(Number of data pages):DEC,已使用页中的数据页总数;

行总数(Number of rows):DEC,表中行的总数;

Partition编号(Partition partnum):DEC,前已经讲述,此处以10进制显示;

Partition锁(Partition lockid):DEC,当锁定表时,其实锁定的是partition编号(在表和partition编号一一对应时)。当使用分片表时,partition锁代替全部分片上的partition编号。

 

Partition页位置

Informix基于表的partition编号肯定表partition页的位置,partition编号存储于systables.partnum。读取partition页时,服务器检查从partition结构的前4字节(包含partition number)中判断是否正确读取。

如下为一个示例:

1.  服务器接收到访问表demodb.t1请求;

2.  为了获取表demodb.t1的partition页,服务器须要知道partition编号(partnum)。服务器从表systables的字段partnum中查找结果;

3.  根据partnum,能够获知dbspace编号和逻辑页编号(partnum由这两个组成,Informix从tblspace tblspace中读取特定的partition页)

4.  Informix处理器从partition页的slot 1(partition结构)的第一个元素(即上面提到的partnum),和第2步从systables表中查询到的partnum对比。

5.  若二者相匹配,则本次操做是成功的。如果不匹配,informix往消息日志里写入断言失败的信息并返回错误号242和134给客户端。

  点击查看原图

 

    Slot 2:包含数据库名,全部者,表名,NLS(有的话);

    Slot 3:包含对每一个特殊字段(blob,varchar等)的描述,每一个特殊字段使用8字节;

    Slot 4:(键、索引的partition页上才有记录)包含key descriptor,用于描述索引信息;

    Slot 5:包含区段列表信息。每8字节描述一个区段,包含区段的开始地址和逻辑页开始数。

    区段slot(slot 5)

    点击查看原图

    Partition页的第5个slot是区段slot,每8字节为一条目,每一条目描述表中的一个区段。每一条目分开4字节的两部分:区段的开始逻辑页编号 和 该页的物理地址。

以上第二个区段为例:8  0  0  0  ea  8  0  0,转换后可知,该区段开始的逻辑页编号为0x8,开始位置为0x8ea,该区段的大小可从下一逻辑页编号(0x20) 减去0x8获得 0x18(即10进制的24页)。 (注意:在不一样版本的数据库上,该输出格式可能不同,原理应是相近的,示例使用的是IDS11.50FC8,第4个区段的物理地址0x4e23转换成10进制为2 00003即该页相对于第一个区段所在的chunk偏移为2,即chunk编号增长2,开始页为编号为3的页,因为第一个区段全部的chunk编号为2,故第4个区段的物理地址为4:3)

准备就绪的条目(on deck or cap entry),在已经使用的区段条目后是准备就绪条目,准备接收下一区段的物理地址。该条目包含空的物理地址和将分配的区段开始逻辑页编号。

 

    表也可能有slot 6,用于描述因alter致使的不一样版本的区段信息,该slot不出如今当前的主partition页中,而是在单独的tblspace tblspace上(联接主partition页)。

    点击查看原图

    如果表进行了更改(alter)操做,须要附加的slot用于保存版本信息。

原表更改(in-place alter)指的是alter table操做更改表结构不须要重建表,而是在tblspace tblspace上的附加页上记录表更改信息。附加页是partition页的扩展,且该页上仅有一个slot即slot 6。该逻辑页编号填充该表partition页上pg_next字段。

已经更改的表(altered table)上的一个记录要更新(update),若是当前页有足够的空间供当前页的全部记录转换至新版本,那么当前页全部的记录都将更新至新版本。若是当前页没有足够的空间供当前页的全部记录转换至新版本,那么仅该记录被更新且被移到其它有相同版本的页中。版本号记录在数据页(data page)上的pg_next字段上。

虽然表能够更改不少次,数据库使用versioning来描述区段中的那些页包含更新页。

每一个表仅能够进行255次的原表更改,其tblspace上至多含 有255个版本的页。

Slot 6包含如下信息(存在版本差别):

2字节:版本号;

2字节:当前版本标识;

4字节:当前版本更改开始的逻辑页;

4字节:保存新的描述(descriptor)信息的tblspace tblspace逻辑页编号

4字节:更改前的行大小

4字节:更改后的行大小

4字节:未知

 

物理日志

在灾难状况下使用

物理日志在顺畅运行的环境里并不体现出重要的用途,它的重要性体如今备份机制和快速恢复机制,这两个机制能保障在电源失败和磁盘失效时能很是快捷的恢复。

物理日志大小影响检查点间隔

太小的物理日志大小设置可能形成检查点过于频繁。

 

    物理日志页结构(physical log page)

    点击查看原图

    物理日志页的结构看起来跟数据页或者索引页很类似,仅如下不一样。

页标识含0x800(pg_flags)

肯定页是物理日志页的最确切方法是检查页的页标识。如果页标识包含0x800,那么这个页就是物理日志页。

页地址并不是物理位置

比较页地址(page address)与物理地址(physical location),如果二者不区配,则代表该页为物理日志页或者是未初始化的页。

 

逻辑日志页结构

点击查看原图

逻辑日志由一组连续的日志页组成,每一个页偏移等于逻辑日志页编号(从0开始)。

请记住日志文件(log file)是chunk上的一个区段(extent),是能够复用的。日志文件只是做为逻辑日志(logical log)的临时存放区域,逻辑日志是惟一的,备份到磁带上的是逻辑日志而不是日志文件(这里说的备份指的是逻辑日志备份)。

逻辑日志能够包含日志文件大小内任意页数。

当逻辑日志缓冲区刷新时,逻辑日志缓冲区信息顺序写入到逻辑日志中。

 

    逻辑日志页结构(logical log page)

    点击查看原图

    逻辑日志页没有slot表(各日志记录各自记录日志长度)。逻辑日志记录很是灵活,能够从一个页跨越到另外一个页中(一个日志记录必须在一个日志文件中,不可跨日志文件)。逻辑日志页头的特别之处:

Pg_nslots:未用,由于逻辑日志页上没有真正意义上的slot。

Pg_frcnt:固定为0,即使该页未必彻底填充(pg_frptr是准确的)。

逻辑日志缓冲区填充逻辑日志页是彻底填充(至页的最后一个字节),故常常有跨逻辑日志页的日志记录。所以绝大多数页是彻底充满的,特别是使用缓冲型日志时。

然而,在使用非缓冲型日志时,检查点或是提交确认的日志记录时,在缓冲区的最后一个页并未彻底填充。刷新回日志文件时,该页设置结束,不容许其它记录追加。Pg_frcnt设置为0的缘由:在逻辑日志缓冲区刷回日志文件前,刷新处理器更新缓冲区最后一页上的pg_frcnt为0,使该页看起来是满的,以阻止其它处理器写入该页。

Pg_next:在逻辑页中,该元素包含逻辑日志维一ID;

Pg_prev:在逻辑页中,该元素包含页偏移(与逻辑页编号相似);该页偏移仅在日志中。

 

    逻辑日志位置(logical log position(logpos))

    点击查看原图

    如图所示,该记录开始位置为0x80字节,位于逻辑日志页0x600中,故其logpos为0x00600080,其前5位为该逻辑日志页的偏移,后3位为记录在该页的起点。

须要注意的是,logpos并不指明具体的日志(uniqid或是日志文件编号)。Logpos仅在特定的逻辑日志中惟一。

 

    练习:在online.log中,每次检查点有相似于如下信息,如何在逻辑日志中找到它?

       23:03:32  Checkpoint Completed:  duration was 0 seconds.

       23:03:32  Wed Apr 13 - loguniq 6, logpos 0x610018, timestamp: 0x40180 Interval: 363

    答:从系统保留页中的检查点、日志页上,能够找到loguniq 6的物理地址,而后从0x610页中,定位0x18(24)字节偏移,便是该次检查点记录。

实际上也能够经过onstat -l的输出获取对应信息。经过onlog来查看逻辑日志记录,如练习中所示,可经过onlog -l -n 6的输出,而后定位到0x610018

 addr     len  type     xid      id link    

610018   44   CKPOINT  1        6  0        0       

         2c000000 06004200 10000000 00000000 ,.....B. ........ 

         00000000 00000000 01000000 00000000 ........ ........ 

         7b010400 00000000 00000000          {....... ....

« Tblspace --informix体系架构笔记 | 页(page)-- informix体系架构笔记»

相关文章
相关标签/搜索