gbase8s系统框架设计-存储单元一

一、存储单元设计

        gbase8s的数据存储使用了多种存储单元(单位),本文主要将其分成两个部分,其一,为使用者接触较多和最先接触的使用单位,dbspace和chunk;其二,使用者优化性能和深入了解的一些基础使用单元(单位),tblspace(也称呼为片)、extent(区段)和page(页)。

  • 其一:dbspace数据空间和chunk数据文件是gbase8s存储单元中最大的两个概念
    • chunk:chunk数据文件是一个物理概念,是一个熟文件或者一个真实存在的存储设备,在最开始给予其指定的文件大小提供后续数据的插入
    • dbspace:dbspace数据空间是一个逻辑概念,其是一个chunk或者多个chunk文件的逻辑集合,其会根据存储数据的不同而有着不同的chunk格式,每个数据空间的组合chunk都是一种格式的。
  • 其二:
    • 页是gbase8s数据库存储的最基础和最小的存储单元,同时也是数据库IO使用的读取和写入单位。在新版本的gbase中,页单位可以进行调整,分别为2KB、4KB、8KB、16KB,最大为16KB
    • extent是一个逻辑概念,其是一组、连续的页的组合,其最小是4个页,最大为4TB,数据库创建后会有默认的extent大小,写满后会自动申请新的extent
    • tblspace:表空间(和oracle的表空间意义不同,oracle的表空间相当于dbspace)是extent再上一层的逻辑概念,其是同一张表所有extent的集合,创建表时会有默认的extent大小,写满后会自动申请新的extent,如果相关会自动合成一个extent,extent申请的数量达到2倍时,下次申请的extent的页数也会翻倍

(一) dbspace的划分

        数据空间是数据文件的逻辑结合,数据文件时熟文件或者相应的存储设备,一个数据空间可能会有一个或者多个数据文件,但是一个数据空间下的数据文件是相同类型的。

       为了说明各种数据空间的差异,将会使用三种方法对数据空间进行区分,分别如下:

  • 按照存储数据的类型分类
  • 按照数据空间对恢复的重要程度进行分类
  • 按照数据空间的存储设计进行分类

1. 按照数据空间的功能进行划分

        按照数据空间的功能也是存储的数据类型进行对数据空间划分,种类如下:

  • 系统数据空间:一般命名为rootdbs,系统数据空间,其主要是存储数据down机时恢复的所需信息和数据库初始化后的一些系统数据,其是gbase8s数据库的中枢
  • 物理日志空间:一般命名为plogdbs,其主要作用是保存数据更改前的镜像文件,当数据发生回退和数据恢复时,可以使用此数据镜像进行回滚和恢复
  • 逻辑日志空间:一般命名为llogdbs,其主要是记录数据更改的操作命令,和物理日志一样,和物理日志一起做事务回滚和恢复事务重做
  • 数据的数据空间:一般会按照业务或者是命名为datadbs,是业务数据存储的主要空间,主要是存储客户的应用数据
  • 简单大对象数据空间:针对text和byte两种字段类型所设立的特殊数据空间,其与普通的数据chunk相比,差异为每次IO时,都会读取一组页面,而不是单个页面进行IO,且大对象做更新没有缓冲,数据空间需要保存前后两部分数据
  • 智能大对象数据空间:针对blob和clob两种字段类型而设立的特殊数据空间,使用了单独的blob头,而不是每页都有page head,这样会使每页有更多空间存储数据
  • 临时大对象数据空间:一般命名为tempdbs,其是为了应对备份时数据无法写入、SPL过程语言中的临时数据和某些关联计算排序等操作而设立的临时空间

2. 按照对恢复的重要程度进行划分

        针对数据恢复时,有些数据空间必须进行恢复才可能使数据库进入在线状态,而有些数据库可以先不进行恢复等待后续数据库软件恢复正常后再进行恢复而不影响数据库的启动在线,依据上述分割点,将数据空间分为关键数据空间和非关键数据空间。 

  • 关键数据空间:总共有三个,为系统数据空间、物理日志数据空间和逻辑日志数据空间,
    • 这三个数据空间必须作为恢复对象才可以使数据恢复到正常状态,进行启动,启动后可以再行恢复其他数据空间
    • 由于数据过多一次性恢复可能需要时间过长,可以现行恢复关键数据空间,从而达到数据库可启动的最先要求,使部分业务进行恢复
  • 非关键数据空间:其他数据空间
    • 此类数据空间可以在关键数据空间恢复后选择进行恢复,从而一部分一部分的恢复数据空间的使用,使业务逐渐全部启动。

3. 按照存储设计chunk开头的系统信息数量进行区分

        上述可知,每个数据空间可以有一个或者多个数据文件(chunk),为了使内容更全面,假设每个数据空间都有多个chunk,按照chunk的开头设计,可以分为三种种:

  • rootdbs的第一个chunk:由于rootdbs是系统数据空间,其第一个chunk记录的系统信息更多,其设计更复杂,其开头信息与其他chunk的系统表信息页数量相比较多
  • 其他数据空间的第一个chunk:每个数据空间的第一个chunk记录信息的比重都会更多,除了rootdbs的第一个chunk外,其他数据空间的第一个chunk是一致的
  • 所有数据空间的非第一个chunk:除了数据空间的开头存储信息比较多,其他的chunk开头是没有存储过多的信息的,所以其他chunk开头需要记录系统信息的页越少

(二) 三种chunk初始化后起始系统信息的存储设计

        以上的数据空间,根据chunk的构造进行区分,总共分为三种:

  • 第一种:rootdbs系统数据空间的第一个chunk;
  • 第二种:其他数据空间的第一个chunk
  • 第三种,所有数据空间的非第一个chunk

1. rootdbs的第一个chunk(作为数据库生成的第一个chunk空间)

        rootdbs是最重要的数据空间,其特性和信息如下

  • 是数据库的第一个chunk
  • 是系统数据库使用的数据空间,如sysmaster、gbasedbt等数据库初始化后信息都会存储在第一个chunk内,所以这个chunk不应该存储用户数据
  • 其包含了数据库崩溃恢复的数据信息
  • 其从前往后分别为保留页、页可用列表页、记录表空间(非oracle表空间)信息的表空间页、逻辑日志页、记录数据库的信息的表空间页、系统数据库空间和其他数据页
  • rootdbs的第一个chunk上的头部信息如果存储数据过多,则会按需在rootdbs上申请其他的系统保留页
  • rootdbs第一个chunk 开头系统页的存储如下:

  • 保留页:root chunk的第一部分系统信息被称为保留页,其占据page 0- page 11页,共12页,其主要被数据库崩溃启动恢复时读取使用
    • page0和page1存储了数据库的版本、授权等信息
    • 从page 2第三个页开始,以奇数和偶数页对称的方式保留数据库系统更新信息,以提供数据库崩溃恢复的最新信息。两者在一定误差内保证一致形成半冗余的存储格式,当恢复时确保其中一个页出现问题时,另外一个页可以作为备份启动
  • chunk free list page:占用1页,此页包含此chunk内所有可用的页的位置信息,每个chunk都有自己的chunk free list page
  • tblspace tblspace:初始有250页,后续会进行扩展
  • 其用来记录特定数据空间中所有表的位置和结构
    • 每个页面也被称为分区页面
  • 分区页面包含每个表的extent的位置和数量、列的数量和描述、索引键数组和数据库名和表名
  • physical and logical logs:逻辑日志,最开始初始化在rootdbs中,但是后续一般会被移动到其他dbs中,其默认最少给3个页;物理日志同样会移动到其他数据空间内,物理日志默认2个也被
  • database tblspace:其列出了这个实例中数据库的列表,包含了数据库的名字、属主、创建时间、系统每个数据库的系统表空间编号和数据库日志模式,通过oncheck -pe dbs|grep database,可以找到相关位置

2. 其他dbspace的第一个chunk

        相比与rootdbs的第一个chunk,其他数据空间的第一个chunk头部信息保留东西少了很多:

  • 保留页:保留页是保存数据库崩溃重启信息的,一般从第三页开始,而其他数据空间的第一个chunk保留页只有两页
  • chunk free list page:chunk的空闲列表,每个chunk都会有
  • tblspace tblspace:相比与rootdbs上的初始250个页,其他dbs的第一个chunk上针对tblspace tblspace只有50个页,记录此chunk中的表空间信息,后续扩展也是50page

3. 非数据空间的第一个chunk的后续chunk

        非第一个chunk、非大对象的chunk的chunk头部信息,只有两个部分

  • reserved page:存在两个保留页
  • chunk free list page:chunk中的空闲列表

(三) 各chunk中的头部页的保留信息

1. rootdbs中chunk的保留页(通过oncheck -pr打印保留页信息)

        保留页是所有chunk空间最开始的内容,rootdbs的第一个chunk会初始化出来12个保留页,而且由每页的标识可以看出,除第一页和第二页之外,其他页都是一一对应的,所以页不够用时,会在rootdbs上申请其他的系统保留页,但是每次会申请双数页,如实例chunk过多,Pchunk和pdbsp记录信息不够使用,会申请四个页,两个DBSP和两个PCHUNK,一一对应。

        如上图所示,rootdbs中的chunk共有12页,从page 0到page 11(为了好识别,写成了1-12),接下来将会解释每页存储的相关信息:

  • PZERO版权页:称为page 0,也是数据库的第一个页面,包含数据库的版权信息和数据库的启动信息
  • CONFIG:包含数据库启动时的系统配置文件信息,用于确定配置文件中的值是否被更改
  • 1CKPT和2CKPT:包含系统最后的检查点信息和逻辑日志文件的位置和时间,用于记录此时数据库崩溃恢复所需的所有物理日志和逻辑日志信息,所有的逻辑日志都会打印出来
--可以使用命令查看保留页的内容,第一页是版本页,第二页参数页,再往下就是检查点的页,检查点页的部分内容如下
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pr |more
Your evaluation license will expire on 2025-03-15 00:00:00

Validating GBase Database Server reserved pages
........
........
    Validating PAGE_1CKPT & PAGE_2CKPT...
          Using check point page PAGE_2CKPT.

    Time stamp of checkpoint       0xa07156
    Time of checkpoint             04/18/2024 09:43:18
    Physical log begin address     3:53
    Physical log size              149100 (p)
    Physical log position at Ckpt  31370
    Logical log unique identifier  108
    Logical log position at Ckpt   0x23d5018 (Page 9173, byte 24)
    Checkpoint Interval            3275
    DBspace descriptor page        1:4
    Chunk descriptor page          1:6
    Mirror chunk descriptor page   1:8

    Log file number                4
    Unique identifier              87
--右侧显示的是此逻辑日志的状态,是否是当前使用的逻辑日志,是否被备份
    Log file flags                 0x15       Log file in use
    &                                         Log file has been backed up
    &                                         Log written to archive tape
    Physical location              2:53
    Log size                       12500 (p)
    Number pages used              12500
    Date/Time file filled          03/27/2024 16:19:38
    Time stamp                     0x4d4b6b
  • 1DBSP和2DBSP记录数据库空间的信息:每个条目跟踪所有数据空间的位置、大小、起始和数据空间的状态
--可以使用命令查看保留页的内容,第一页是版本页,第二页参数页,再往下就是检查点的页,检查点页的部分内容如下
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pr |more
Your evaluation license will expire on 2025-03-15 00:00:00

 Validating GBase Database Server reserved pages   
.............
.............
 Validating PAGE_1DBSP & PAGE_2DBSP...
          Using DBspace page PAGE_1DBSP.

    DBspace number                 1
    DBspace name                   rootdbs
--这里将会打印出数据库空间的相关信息和状态
    Flags                          0x60001    No mirror chunks
    Number of chunks               1
    First chunk                    1
    Date/Time created              03/15/2024 10:15:41
    Partition table page number    14
    Pagesize (k)                   2
    Logical Log Unique Id          11
    Logical Log Position           0x6018
    Oldest Logical Log Unique Id   108
    Last Logical Log Unique Id     -1
    Expand Size (Chunk Create)     10.0%
    Expand size (Chunk Extend)     10000k
    Time of last physical restore  03/26/2024 14:03:44
    DBspace archive status

          Archive Level            0
          Real Time Archive Began  04/12/2024 10:00:44
          Time Stamp Archive Began 10459430
          Logical Log Unique Id    107
          Logical Log Position     0x2449018
  • 1Pchunk和2Pchunk:当开启了镜像功能后,chunk可以存在镜像数据空间,而与镜像空间对立的是主chunk,这块被称为primary chunk,记录的是主chunk的信息,位置、大小、起始和数据空间的状态
--下列为其中一个chunk的信息
    Validating PAGE_1PCHUNK & PAGE_2PCHUNK...
          Using primary chunk page PAGE_1PCHUNK.

    Chunk number                   1
    Flags                          0x30040    Chunk is online
    Chunk path                     /home/gbasedbt/gbase/node1_dbs/rootdbs
    Chunk offset                   0 (p)
    Chunk size                     252400 (p)
    Number of free pages           236159
    DBspace number                 1
  • 1Mchunk和2Mchunk:当开启了镜像功能后,这里记录镜像chunk的空间信息,虽然没有开启镜像空间,但是这两个页依然存在,存在表头信息
--Mchunk是第9和第10页,所以是page8和page 9,查看chunkpage8和page9内容如下,只有页头信息
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pP 1 8
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
1:8              10473116 ce0a   0      1800 ROOTRSV      24    2020  0        0
        slot ptr   len   flg
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pP 1 9
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
1:9              10473117 ce0a   0      1800 ROOTRSV      24    2020  0        0
        slot ptr   len   flg
  • 1ARCH和2ARCH:包含了ontape最后备份的信息,HDR的信息也在这个位置,可以使用oncheck -pr进行查看最后的内容
    Validating PAGE_1ARCH & PAGE_2ARCH...
          Using archive page PAGE_1ARCH.

    Archive Level                  0
    Real Time Archive Began        04/12/2024 10:00:44
    Time Stamp Archive Began       0x9f9926
    Logical Log Unique Id          107
    Logical Log Position           0x2449018

    DR has not been initialized.

2. 所有chunk的Chunk free list page

        这个页类型初始时候只有一个page,但是后续空间不足(当chunk中的空间碎片越来越多后),会再次进行申请。其内部记录的是chunk空间内每个空闲空间的起始位置和空闲大小。

  • 当空间被回收时,当表被删除或者行数据被更改后,都会有新的条目被添加到这里面
  • 当新产生的空闲空间和已经有的条目相关联,则只会修改已有条目的length

3. chunk中的tblspace tblspace

        tblspace tblspace用来记录dbspace中所有的表位置的信息,也被称为partition page,其在rootdbs的第一个chunk上会申请250个页面用来存储表空间信息,而在其他数据空间的第一个chunk上会初始化50个page,如果最初申请的页面不够,会额外申请extent。

  • talspace tblspace是一串连续的页组成的一个区段,这个区段在一定程度上也可以看成一张特殊的表,每个表都由位图页和数据组成,故这个区段的第一页同样也是位图页,这张表的数据是描述的数据库中的每个表的信息,所以这个区段的第一行数据就是描述的这张特殊表的位置信息,指向了这个区段的位图页。tblspace tblspace中的每个描述表信息的结构都是几乎一样的
  • tblspace tblspace除了绝对地址物理地址之外,其本身存在一个相对的逻辑地址,由8个字节进行描述,前3个字节为chunk号,后五个字节为逻辑页位置,如tblspace tblspace的第一页,是chunk 1的page 13,但是相对地址为page 0,以下描述都是逻辑地址
  • page 0:为tblspace tblspace的位图页,用来存储四部分信息
    • tblspace的extent数目和位置
    • 字段的数量和描述
    • 表的索引
    • 表本身的统计更新信息(行数、列数、数据页面数、空闲页面数等)
  • page 1:存放tblspace tblspace本身的信息,其把位图页当成了一张表,其描述的信息和位置指向了page 0
  • page 2:是数据库中某张表的信息,其中的信息指向了table 1的位置
  • page 3:同样如此,其中的信息指向了table 2的位置

4. database tblspace数据库数据空间的信息

        database tblspace是一个包含系统中所有数据库的列表,包含以下内容:

  • 数据库名
  • 数据库所有者
  • 数据库创建时间
  • 数据库在systables找那个的tblspace编号
  • 数据库日志类型标识
  • 查找database tblspace的物理位置,使用oncheck -pe输出结构中sysmaster:sysdatabases的位置即是

(四) 逻辑组合extent和tblspace的描述

1. extent的概念

        extent是一组连续的页的组合,最小为4个page,最大为4TB,其在创建时有指定的大小默认为16kb,当空间不足时会自动申请新的extent

  • 当新申请的extent和旧的extent相连时,会自动形成一个大extent
  • 一个分片(table一张表)上最多可以申请32000个extent
  • 当一个表已经申请的extent数目是16的倍数时,informix会认为这张表是潜在的大表,因此在每个间隔会把next extent乘以2
  • 当dbspace的剩余空间小于下一个要申请的extent时,extent会申请为最大的连续空间,next extent大小不会发生变化

2. extent 的内容设计

        extent是一组连续的页的组合,其根据存储的信息不同相应的页组成也不同,可以根据存储的页和存储的索引进行分类,extent中存储数据和存储索引的结构差异如下:

存储的数据:

  • page 0 bitmap page:位图页用来跟踪extent中的所有其他页,所有的位图页使用4位来跟踪一个page
  • page 1 data page:存储数据的行,每页最多存储255行数据。每个行通过rowid来区分,rowid是4字节整数,有页号和表头的slot number组成。4个字节8位16进制,导致最多能存储多少数据
  • remainder page:当一个记录的长度大于一页时,记录的第一部分称作home page,而后续部分称作remainder page,remainder page 通过向前的指针指向home page。
  • blob page:如果将blob数据放在与其他数据相同的dbspace上,而不是blobspace,那么extent中会申请blob page,每一个blob有一个blobid和行记录关联。blobid用于定位extent中的blob数据,它也有页面号和sblob number 组成。如果一个大对象的大小大于一个页面,他会申请很多页面。这些页面通过向前的指针连接在一起
  • free page:空闲页,没有存放任何数据。如果extent中所有页面都是空闲的,这个extent不会被自动删除,除非手动删除表、重建表和重组(可以在线重组)。

存储的索引:

                

  • bitmap page:bitmap page 用来跟踪extent的所有页,它包含控制信息,这些控制信息用来监控extent中每个也填充的程度,跟踪每个页需要4bit
  • 索引页:索引页包含表上创建索引的数据,索引页的数据存放和数据页的数据存放有点类似,每一个索引实体由一个键值和一个或多个rowid组成,rowid指向一个记录行,这个记录行必须包含键值的信息,对于唯一性索引,每个键值只对应一个rowid;对于复合性索引,如果由记录重复,一个键值可能会对应多个rowid,因此,索引的键值的长度可能是不一样的
  • 空闲页:空闲页可以是索引页,也可以是空闲页,即使一个extent中的所有页都是空闲页,这个extent也不会被释放,除非索引重建、删除了表、重创建了表或者对表进行了重组。

3. extent的组合tblspace表空间

        一个tblspace是一张表的extent的逻辑组合,一个tblspace包含一个或者多个extent。当表分片时,这个表将有多个tblspace,每个片对应一个tblspace,tblspace代表的空间可以是不连续的。

        关于gbase8s的tblspace特性:

  • tblspace用来存放表的数据或者索引,索引和数据存放在不同的tblspace中
  • 当创建表或者索引时可以指定存放的dbspace
  • tblspace是一个dbpsace上存放的一张表或者一个索引的所有extent的集合
  • tblspace代表的空间不一定是连续的,这些页面可以在一个chunk上,也可以在多个chunk上
  • 对于不分片的表,tblspace总在同一个dbspace上,对于分片的表,每个dbspace会有一个tblspace id编号,这个编号存放在sysfragments表的partn列

(五) 逻辑单元-页

        页、extent和tblspace被称之为逻辑单元。

1. 页存储信息的设计

        页是gbase8s数据库存储的最小的单元,页在其他数据库中也被称之为块,但都是写入数据的基本单位。

        页存储数据的特点:

  • 页可以存储索引,也可以存储数据,但是只能存储一种类型,一个页上不能同时存在数据和索引
  • 除了存储数据和索引的页之外,还有一种页是为了便于系统管理而引入的,比如chunk free list页(记录chunk中空闲页面的起始位置和长度,chunk中碎片越多,需要的页面越多)
  • gbase8s中的页包含多种:2KB,4KB,8KB,16KB
  • 页中的行通过rowid来区分,rowid是4字节的整数,共8位16进制的数据,其中6位表示在tblspace中的page offset,后两位表示slot num,即在页中的行数

2. 页信息存储的设计(普通数据页)

        页的大小在informix10之后的版本增加了可以调整的功能,即可以将页面设置为想要的页面大小。gbase8s可以根据数据行的大小可以设置为2KB、4KB、8KB和16KB四种,行长度越大,需要设置的页大小越大。页数据的设计如下:

        gbase8s数据库在之前的版本中chunk最大为2GB,后面进行了更新调整,chunk可以调整为4TB,所以针对页的设计发生了改变,本次只观察大chunk的页面设计,上图中,每一行为16bit,故pg_addr占用了4字节,pg_chunk占用了2字节,pg_chksum占用了2字节,num_slot2字节,pg_type占用2字节,free_ptr占用2字节,free_cnt占用2字节,next占用2字节,prev占用2字节,timestamp占用4字节,row offset和row size是数据行的起始位置和长度的统计,其和每行数据是一一对应的,是属于数据部分,所以页面的实际数据使用的长度为页面大小-24bytes-4bytes。下面主要是介绍各个部分的函数:

  • pg_addr:是页面地址,占用4个字节,1个字节=8个二进制=2个16进制,所以页可以有8个十六进制的数量,理论上每个chunk的页的数量为16^8=4294967296的数量,当页面为2KB时,理论上为8TB,但是实际上一个chunk最大为4TB,页面数量只有一半实际上可以使用
  • pg_chunk:为chunk号,chunk号占用2字节,共4个16进制,则chunk理论上最多有16^4个,为65536,实际上限制保留在32766个
  • pg_chksum:时间校验戳,用于校验页面存储一致性的检验值
  • num_slot:占用2个字节,1字节=8位二进制=2位16进制,高五位表示当前页面大小(-1表示2k,-2表示4k),低11位表示最大slot
  • pg_type:页属性标志,占用两个字节,用来表示当前页存储的数据类型,如存储数据、索引等
    • 0x0001:Data page数据页
    • 0x0002:partition page分区页
    • 0x0004:Free-list page空闲位图页
    • 0x0008:chunk free-list page记录chunk空闲页信息的页
    • 0x0009:Remainder page记录长度大于一页的数据的之后的数据的页(会有指针指向之前的数据)
    • 0x000b:Partition-resident blobpage
    • 0x000c:Blobspace-resident blobpage
    • 0x000d:Blob chunk free-list bitmap
    • 0x000e:Blob chunk blob map page
    • 0x0010:B-tree node page
    • 0x0020:B-tree root node,
    • 0x0040:B-tree twig node
    • 0x0080:B-tree leaf node
    • 0x0100:Logical log page
    • 0x0200:Last page of logical log
    • 0x0400:Sync page of logical log
    • 0x0800:Physical log page,在大chunk中表示是大区块指示符
    • 0x1000:Root reserved page
    • Flag values used only in shared memory
      • 0x2000:No physical logging required
      • 0x8000:B-tree leaf with deleted entries
      • 0x4000:page altered in-place
  • free_ptr:记录最后一个插槽(页面最后4个字节往前的两部分row size和row offset)的位置
  • free_cnt:此页中所有空闲的字节数
  • next:索引页的时候会展示相关数据,展示的是同层索引的下一节点,展示的是高地址(高键值)。非索引页的时候会保留逻辑日志页信息或者版本号
  • prev:索引页的时候会展示相关数据,展示的是同层索引的上一节点,展示的是低地址(低键值)
  • timestamp:时间戳,每次数据更新后,时间戳都会更新
  • slot table:槽表,记录页中数据条目的长度和起始位置,页从后往前看,第一部分为四字节的时间戳,之后为数据行的长度和起始位置,两者共同组组成每行数据的slot table。
--可以使用od命令查看某个文件某也页的信息
dd if=/home/gbasedbt/gbase/node1_dbs/datadbs1_1 skip=4 count=1 bs=16k |od -x

3. chunk free list page

        针对chunk free list的页,其结构和数据结构几乎一致,但是其内部存储的数据为上述所示,包含每个chunk内部空闲空间的起始位置和大小。

4. tblspace tblspace page页的结构

         

        tblspace tblspace中的页又被称为partition page,每个partition page使用五个槽位来描述一张表的信息,每个partition page的页大致是一样的:

  • slot 1:第一个槽位的大小根据版本有关,有的92字节,有的136字节
    • 其保存了表的基本信息:包括列、索引数量和区段信息
    • 其还作为优化器提供信息:有些tbspace 信息不仅储存在partition结构中,也储存在作为优化器使用的系统编目内。优化器通过访问系统编目信息生成一些执行计划,但是当表增长后,系统编目的信息已经过期,但是优化器仅访问系统编目的信息,不会访问tblspace中的partition页,所以在更新数据库统计信息的一些操作,就是将partition页中的tblspace信息复制到系统编目,从而生成准确的执行计划。
  • slot 2:数据库名,表的所有者、表名和方言等信息
  • slot 3:特殊字段信息,比如varcahr和blob
  • slot 4:记录索引的相关键值信息
  • slot 5:区段列表信息,每个条目字节数量不一致(有的是8字节,本次gbase3.5.1是十个字节),十个字节,前四个字节是逻辑页的开始页,往后六个字节是extent第一页的物理地址,六个字节中前两个是chunk号,后四个是页号(读的顺序有的是从后往前,有的是从前往后,本版本是从前往后读),具体的页查看请看下一节区段的位置查找
  • slot 6:有些表可能会有第六个slot,但是不会出现在这张表的主分区上,只会在tblspace tblspace附加页上进行记录,其用来描述因为更改而产生的不同版本的行,这个页被称为辅助分区标头页

5. bitmap pages

  • 位图页可以用来查找表的可用空间
  • 位图页位于每个tabspace的 page 0,所以可以使用oncheck -pp partnum 0查看位图页
  • 系统表的数据和索引页在一个位图上都可以看到,但是用户表的索引页和位图页是分开的,数据extent包含数据的位图页,索引的extent包含索引的位图页
  • 页0始终是位图页,表如果过于大,可能会新建新的位图页,针对2KB的页,最多记录4032个逻辑页,将会创建新的位图页,针对4KB,最多记录8128个页
--列出了一张系统表的位图页,系统表的位图可以数据和索引一起描述
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pp 0x00600047 0
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:4696           373632   a1db   0      804  FREE         24    16356 0        0
   0:8 8 8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

        上图第5行数据显示的是系统表的位图页:

  • 0:代表的开始页
  • 8:这个值指向的是位图页和索引页,但是第一个值8表示的是位图页,其他的8指向的是索引页
  • 4:值4表示页为装满,可以容纳更多的行
  • 0:空闲的页

        由于系统表没有写满的页,无法准确观测出位图页的变化,接下来将会以用户的一张表演示位图页在插入数据的变化:

--针对位图页做的演示
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pp 0x0060008E 0
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:9432           10472520 e809   0      804  FREE         24    16356 0        0
   0:8 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ dbaccess test -
Your evaluation license will expire on 2025-03-15 00:00:00

Database selected.

> execute procedure t_13(10000);

Routine executed.

>
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pp 0x0060008E 0
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:9432           10513565 48e3   0      804  FREE         24    16356 0        0
   0:8 c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
  32:c c c c c c c c c 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  64:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 图页中的c值:表示此页数据已经装满
  • 查看第一次,只有一个页装满,一个c值
  • 往表里插入10000条数据
  • 发现有40个c,且有一个页未装满,一个页装255条数据,10000条数据敲好装不到40页

二、信息查看

1.根据partnum计算出表在tblspace tblspace中页

--进入数据库,查看表的partnum号,由于信息为16进制,需要将十进制转为16进制
--转为十六进制后,得到结果如下,001表示在第一个chunk内,00004表示在tblspace tblspace中位于page 4
dbaccess test -
> select hex(partnum),tabname from sysmaster:systables limit 5;
(expression)  0x00100004
tabname       systables
(expression)  0x00100005
tabname       syscolumns
(expression)  0x00100006
tabname       sysindices
(expression)  0x00100007
tabname       systabauth
(expression)  0x00100008
tabname       syscolauth
--由于rootdbs 第一个chunk,page 0到 page 11为保留页,page 12 为块可用列表页,page 13为tblspace tblspace的page 0,则tblspace的page 4,相当于实际上的page 17
--通过命令打印出来rootdbs 第一个chunk的第17页,信息如下
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pP 1 17
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
1:17             403558   2870   5      802  PARTN        374   1650  0        0
        slot ptr   len   flg
        1    24    136   0
        2    160   40    0
        3    200   36    0
        4    236   88    0
        5    324   50    0
slot   1:
    0:  4  0 10  0  6  9  0  0 f9  1  0  0  3  0  2  0   ........y.......
   16:  4  0  0  8 51 af f3 65 29  1  0  0  8  0  0  0   ....Q/se).......
   32: 40  0  0  0 40  0  0  0 38  0  0  0 1b  0  0  0   @...@...8.......
   48: ff ff ff ff  4  0 10  0  1  0  0  0  0  0  0  0   ................
   64: ab  1  0  0  0  0  0  0  d  3  0  0  0  0  0  0   +...............
   80: 8c  0  0  0  0  0  0  0 1f  1  0  0  1  0  0  0   ................
   96:  0  0  0  0  1  0  0  0  1  0  0  0  0  0  0  0   ................
  112:  1  0  0  0  1  0  0  0 50 20  0  0  0  0  0  0   ........P ......
  128:  0  0  0  0  0  0  0  0                           ................
slot   2:
    0: 73 79 73 6d 61 73 74 65 72  0 67 62 61 73 65 64   sysmaster.gbased
   16: 62 74  0 73 79 73 74 61 62 6c 65 73  0 65 6e 5f   bt.systables.en_
   32: 55 53 2e 38 31 39  0  0                           US.819..........
slot   3:
    0:  0  0  0  0  0  0 80  0  0  0  0  5 d6  0  0  0   ............V...
   16:  0  0 80  0  0  0  0  5 58  1  0  0  0  0 80  0   ........X.......
   32:  0  0  0  5                                       ................
slot   4:
    0:  0  0  0  0  2  0 a2  0  0  0  0  0  0  0  0  0   ......".........
   16:  1  0  0  0  0  0  0  0 82  0  5  0  0  0  0  0   ................
   32:  0  0  0  0 82  0  0  0 20  0  0  0  0  0  0  0   ........ .......
   48:  0  0  0  0 18  0  4  0  1  0  4  0  0  0  0  0   ................
   64:  0  0  0  0  2  0  0  0 a6  0  0  0  4  0  2  0   ........&.......
   80:  0  0  0  0  0  0  0  0                           ................
slot   5:
    0:  0  0  0  0  0  1  0  0 9d 5b  0  0  0  8  0  1   .........[......
   16:  0  0 9f f3  0  0  0 10  0  1  0  0 a6 19  0  0   ...s........&...
   32:  0 20  0  1  0  0 ab 5c  0  0  0 40  0  0  0  0   . ....+\...@....
   48:  0  0                                             ................
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$

2.使用命令查看各dbspacec数据空间的表片便宜位置

--展示了datadbs1数据空间的部分偏移量
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pe datadbs1
Your evaluation license will expire on 2025-03-15 00:00:00


DBspace Usage Report: datadbs1            Owner: gbasedbt  Created: 03/15/2024


 Chunk Pathname                             Pagesize(k)  Size(p)  Used(p)  Free(p)
     6 /home/gbasedbt/gbase/node1_dbs/datadbs1_1           16    64000     1303    62697

 Description                                                   Offset(p)  Size(p)
 ------------------------------------------------------------- -------- --------
 RESERVED PAGES                                                       0        2
 CHUNK FREELIST PAGE                                                  2        1
 datadbs1:'gbasedbt'.TBLSpace                                         3       50
 gbasedb:'gbasedbt'.systables                                        53        4
 gbasedb:'gbasedbt'.syscolumns                                       57        8
 gbasedb:'gbasedbt'.sysindices                                       65        8
 gbasedb:'gbasedbt'.systabauth                                       73        4
 gbasedb:'gbasedbt'.syscolauth                                       77        4
 gbasedb:'gbasedbt'.sysviews                                         81        4
 gbasedb:'gbasedbt'.sysusers                                         85        4
 gbasedb:'gbasedbt'.sysdepend                                        89        4
 gbasedb:'gbasedbt'.syssynonyms                                      93        4
 gbasedb:'gbasedbt'.syssyntable                                      97        4
 gbasedb:'gbasedbt'.sysconstraints                                  101        4
 gbasedb:'gbasedbt'.sysreferences                                   105        4
 gbasedb:'gbasedbt'.syschecks                                       109        4
 gbasedb:'gbasedbt'.sysdefaults                                     113        4

3.查询时表的一致性检验

        本次对表t3做信息检验,步骤如下:

  • 在数据库中查看t3表的partnum号
  • 根据命令查看t3表的物理地址
  • 根据t3表的物理地址去查看表在页中的信息记录
  • 根据slot1的记录对比partnum号是否一致
--查看t3表的partnum号16进制值
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ node1_dbs]$ dbaccess test -
Your evaluation license will expire on 2025-03-15 00:00:00

Database selected.

> select hex(partnum),tabname from systables where tabname='t3';



(expression)  0x0060008E
tabname       t3
--查看表的结构信息
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ node1_dbs]$ oncheck -pt test:t3
Your evaluation license will expire on 2025-03-15 00:00:00


TBLspace Report for test:gbasedbt.t3

    Physical Address               6:6088
    Creation date                  03/15/2024 10:22:31
    TBLspace Flags                 902        Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               20
    Number of special columns      1
    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)                   16
    First extent size              4
    Next extent size               4
    Number of pages allocated      4
    Number of pages used           2
    Number of data pages           1
    Number of rows                 5
    Partition partnum              6291598
    Partition lockid               6291598

    Extents
         Logical Page     Physical Page        Size Physical Pages
                    0            6:9432           4         32


--根据第一行6:6088,已知数据在第6个chunk第6088页
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ node1_dbs]$ oncheck -pP 6 6088
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:6088           10459821 8dfc   5      802  PARTN        224   16136 0        0
        slot ptr   len   flg
        1    24    136   0
        2    160   32    0
        3    192   12    0
        4    204   0     0
        5    204   20    0
slot   1:
    0: 8e  0 60  0  2  9  0  0 14  0  0  0  1  0  0  0   ..`.............
   16:  1  0  0 40 e7 b0 f3 65  1  0  0  0 20  0  0  0   ...@g0se.... ...
   32: 20  0  0  0  4  0  0  0  2  0  0  0  1  0  0  0    ...............
   48: ff ff ff ff 8e  0 60  0  1  0  0  0  0  0  0  0   ......`.........
   64:  6  0  0  0  0  0  0  0  c  0  0  0  0  0  0  0   ................
   80:  1  0  0  0  0  0  0  0  5  0  0  0  1  0  0  0   ................
   96:  0  0  0  0  1  0  0  0  1  0  0  0  0  0  0  0   ................
  112:  1  0  0  0  8  0  0  0 80 d0 1b  1  0  0  0  0   .........P......
  128:  0  0  0  0  0  0  0  0                           ................
slot   2:
    0: 74 65 73 74  0 67 62 61 73 65 64 62 74  0 74 33   test.gbasedbt.t3
   16:  0 7a 68 5f 43 4e 2e 35 37 33 37 32  0  0  0  0   .zh_CN.57372....
slot   3:
    0:  4  0  0  0  0  0  a  0  0  0  0  5               ................
slot   4:
slot   5:
    0:  0  0  0  0  0  6  0  0 24 d8  0  0  0  4  0  0   ........$X......
   16:  0  0  0  0                                       ................

        根据slot1的前6为值,为8e 00 60 00,进行位置转换后为0060008e,经查看和数据库中记录的信息一致。

4.查看表逻辑页的信息

同上,查看表t3逻辑页的信息。步骤如下:

--获取表t3的分区号,如下为6291598
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pt test:t3
Your evaluation license will expire on 2025-03-15 00:00:00


TBLspace Report for test:gbasedbt.t3
--此页是tblspace tbspace中关于表t3的信息页
    Physical Address               6:6088
    Creation date                  03/15/2024 10:22:31
    TBLspace Flags                 800902     Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               24
    Number of special columns      1
    Number of keys                 0
    Number of extents              2
    Current serial value           1
    Current SERIAL8 value          1
    Current BIGSERIAL value        1
    Current REFID value            1
    Pagesize (k)                   16
    First extent size              4
    Next extent size               8
    Number of pages allocated      8
    Number of pages used           7
    Number of data pages           6
    Number of rows                 1027
    Partition partnum              6291598
    Partition lockid               6291598

    Extents
         Logical Page     Physical Page        Size Physical Pages
                    0            6:9432           4         32
                    4            6:9784           4         32

[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$
--根据分区号查看这个表的逻辑页,page 0 是位图信息
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pp 6291598 0|more
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:9432           10469258 9bcb   0      804  FREE         24    16356 0        0
   0:8 c c c c c 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

5.根据页中的slot5计算区段信息

--t3表的物理地址已知是chunk6,6088页,对其进行查看信息如下
--查看tblspacce tblspace的页
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pP 6 6088
Your evaluation license will expire on 2025-03-15 00:00:00
addr             stamp    chksum nslots flag type         frptr frcnt next     prev
6:6088           10469275 a8ca   5      802  PARTN        234   16126 99       0
        slot ptr   len   flg
        1    24    136   0
        2    160   32    0
        3    192   12    0
        4    204   0     0
        5    204   30    0
slot   1:
    0: 8e  0 60  0  2  9 80  0 18  0  0  0  1  0  0  0   ..`.............
   16:  2  0  0 40 e7 b0 f3 65  1  0  0  0 20  0  0  0   ...@g0se.... ...
   32: 40  0  0  0  8  0  0  0  7  0  0  0  6  0  0  0   @...............
   48: ff ff ff ff 8e  0 60  0  1  0  0  0  0  0  0  0   ......`.........
   64:  4  4  0  0  0  0  0  0  c  0  0  0  0  0  0  0   ................
   80:  1  0  0  0  0  0  0  0  3  4  0  0  1  0  0  0   ................
   96:  0  0  0  0  1  0  0  0  1  0  0  0  0  0  0  0   ................
  112:  1  0  0  0  8  0  0  0 80 d0 1b  1  0  0  0  0   .........P......
  128:  0  0  0  0  0  0  0  0                           ................
slot   2:
    0: 74 65 73 74  0 67 62 61 73 65 64 62 74  0 74 33   test.gbasedbt.t3
   16:  0 7a 68 5f 43 4e 2e 35 37 33 37 32  0  0  0  0   .zh_CN.57372....
slot   3:
    0:  4  0  0  0  0  0  a  0  0  0  0  5               ................
slot   4:
slot   5:
    0:  0  0  0  0  0  6  0  0 24 d8  0  0  0  4  0  6   ........$X......
   16:  0  0 26 38  0  0  0  8  0  0  0  0  0  0         ..&8............
--slot5记录了extent的区段位置
--前四个字节记录了逻辑页的起始位置,第一行前四个为0,表示逻辑页为0,往后六个字节,前两个字节为06,表示chunk为6,2到4字节为0 0 24 d8,计算为2*16*16*16+4*16*16+13*16+8=9432
--再往后4个字节为0 0 0 4,表示逻辑页的起始为4页,往后6位为0 6 0 0 26 38,计算为9784
--经过计算后区段的信息为
0     6:9432
4     6:9784




--本次查找test库t3表的tblspace 的物理位置
[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pt test:t3
Your evaluation license will expire on 2025-03-15 00:00:00


TBLspace Report for test:gbasedbt.t3
--以下是tblspace的物理位置
    Physical Address               6:6088
    Creation date                  03/15/2024 10:22:31
    TBLspace Flags                 800902     Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               24
    Number of special columns      1
    Number of keys                 0
    Number of extents              2
    Current serial value           1
    Current SERIAL8 value          1
    Current BIGSERIAL value        1
    Current REFID value            1
    Pagesize (k)                   16
    First extent size              4
    Next extent size               8
    Number of pages allocated      8
    Number of pages used           7
    Number of data pages           6
    Number of rows                 1027
    Partition partnum              6291598
    Partition lockid               6291598

    Extents
         Logical Page     Physical Page        Size Physical Pages
                    0            6:9432           4         32
                    4            6:9784           4         32


        由上可知,计算出来的值和实际查询出来的值一致

5.查看表更详细的结构信息

[gbasedbt@iZ2ze2nmdlhki0ezcrioayZ ~]$ oncheck -pT test:t3
Your evaluation license will expire on 2025-03-15 00:00:00


TBLspace Report for test:gbasedbt.t3

    Physical Address               6:6088
    Creation date                  03/15/2024 10:22:31
    TBLspace Flags                 800902     Row Locking
                                              TBLspace contains VARCHARS
                                              TBLspace use 4 bit bit-maps
    Maximum row size               24
    Number of special columns      1
    Number of keys                 0
    Number of extents              4
    Current serial value           1
    Current SERIAL8 value          1
    Current BIGSERIAL value        1
    Current REFID value            1
    Pagesize (k)                   16
    First extent size              4
    Next extent size               64
    Number of pages allocated      64
    Number of pages used           42
    Number of data pages           41
    Number of rows                 10003
    Partition partnum              6291598
    Partition lockid               6291598

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值