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體系架構筆記»

相關文章
相關標籤/搜索