tft每日頭條

 > 科技

 > PGA結構

PGA結構

科技 更新时间:2025-05-04 22:20:46

PGA結構?今天主要講講PG的數據結構,PG數據存儲結構分為:邏輯結構和物理存儲,下面我們就來說一說關于PGA結構?我們一起去了解并探讨一下這個問題吧!

PGA結構(超詳細的PG數據存儲結構--邏輯結構和物理存儲總結)1

PGA結構

概述

今天主要講講PG的數據結構,PG數據存儲結構分為:邏輯結構和物理存儲。

其中邏輯存儲結構是内部的組織和管理數據的方式。物理存儲結構是操作系統中組織和管理數據的方式。邏輯存儲結構适用于不同的操作系統和硬件平台。


一、邏輯存儲結構

邏輯結構包括:

所有數據庫對象都有各自的oid(object identifiers),oid是一個無符号的四字節整數,相關對象的oid都存放在相關的system catalog表中,比如數據庫的oid和表的oid分别存放在pg_database,pg_class表中。

1、數據庫集群-Database cluster

2、數據庫-Database

3、表空間-tablespace

數據庫在邏輯上分成多個存儲單元,稱作表空間。表空間用作把邏輯上相關的結構放在一起。數據庫邏輯上是由一個或多個表空間組成。

新創建的數據庫默認創建下面的表空間:

1)Catalog表空間 存放系統表信息 2)System表空間 存放用戶數據 3)Temp表空間

4、模式-Schema

自動創建的系統模式如下:

1)PG_CATALOG 2)PG_LARGEOBJECT 3)PG_TOAST 4)PG_PARTITION

默認的用戶模式PUBLIC。

5、段-segment

6、區-extent

7、塊-block

8、數據庫對象-Database object

1)模式對象 表、索引、序列、大對象、視圖、函數、存儲過程、觸發器、包 … … 2)非模式對象 用戶、數據庫

9、數據表-Table

10、索引-Index

11、序列-Sequence

12、視圖-View


二、物理存儲結構

在執行initdb的時候會初始化一個目錄,通常我們都會在系統配置相關的環境變量$PGDATA來表示,初始化完成後,會再這個目錄生成相關的子目錄以及一些文件。在postgresql中,tablespace的概念并不同于其他關系型數據庫,這裡一個tablespace對應的都是一個目錄。如下圖就是PG的物理結構:

1、存儲系統主要包括三個部分:

内存中:buffer,MemoryContext;

數據文件,臨時文件;

日志文件,日志緩存。

2、文件和目錄相關作用描述:

3、數據文件結構

3.1、頁

将數據文件中的空間從邏輯上劃分成一個個頁面(數據塊)。頁面是數據庫I/O的基本單位,即隻能整頁讀寫數據文件, 頁面的大小默認是8K。

頁面可以分成兩種:

1)數據頁面:數據頁面是用來存儲用戶數據的。

2)控制頁面:控制頁面用來管理這些數據頁面。

數據庫共享緩存中的空間劃分也是按頁為基本單位, 一個頁的大小與數據文件中頁的大小一緻, 這樣便于整頁讀取數據文件,并放入到數據庫Buffer中, 從Buffer寫入數據文件也同理,保證了緩存與數據文件結構和内容上的一緻性。

3.2、Block(塊)

概念上基本等同于Page, 但Block更多用于說明DMS中對數據文件中Page的描述。

例如: 對文件的讀寫的操作, 文件讀寫位置的定位, 數據文件空間回收等操作, 單位均是以塊進行。

數據塊的大小在系統初始化時指定,默認是8K,可以取值4K,8K,16K,32K。

3.3、Extent(區)

把數據文件中8個連續的Page構成的空間稱為一個Extent。Extent是數據庫進行數據文件空間分配/釋放的基本單位。每個表、索引、序列對象都是由若幹個區組成。數據文件被創建後,除自動保留部分區作為控制區外,其他區全部處于未分配狀态。表、索引、序列對象的所有數據都存放在Extent中,當向這些Extent中插入數據時,若該Extent的所有頁面都已占滿,系統就會自動在所屬表空間的數據文件中尋找一個尚未分配的區,并将其狀态修改為數據區。

3.4、控制頁面

用于空間管理的控制頁面:PFS/GAM/IAM。

用于增量備份的控制頁面:DCM。

判斷可見性的控制頁面:VM。

預留的控制頁面:BCM/SGAM。

3.5、PFS

Page Free Space,簡稱PFS頁.

用于記錄本數據文件中頁面的空間使用情況。對文件中的每個頁面,PFS中都有一個“字節”與之對應,該字節記錄了該頁面的狀态。

PFS頁前64bytes被預留為頁頭, 剩下81024-64=8128一共覆蓋81288K=64MB空間.

故PFS頁每隔8128個頁面出現一次, 系統初始化把第一個PFS頁放在數據文件的第二個頁面位置,即:第1号數據頁面, 由此可知,第N個PFS頁的位置在8128*N 1.

3.6、GAM

Global Allocation Map,簡稱GAM頁。

功能:記錄所在數據文件的Extent的分配情況,GAM頁中除GAM頭外,剩下空間的每一位(bit)均對應一個Extent的分配情況。若某bit位為1,則表明該bit位所關聯的Extent已被分配出去,反之未被分配。

若一個GAM頁面大小為8K,則除GAM頭(64 bytes)外,一個GAM頁面所能覆蓋的文件範圍是: (81024-64)8(88K),約4GB空間。此外,GAM頁每隔881288個頁面出現一個,系統要求第一個GAM頁出現在文件的第3個頁面位置(即:第2個索引位置),由此得知,第N個GAM頁的出現位置是: 881288*N 2

3.7、IAM

Index Allocation Map,簡稱IAM頁。

功能:每個IAM頁隻隸屬于一個數據庫對象(例如:表),但一個數據庫對象可包含多個IAM頁,由此可見IAM頁與數據庫對象的關系是1對1,而數據庫對象與IAM頁的關系是1對多.

IAM的結構與GAM頁類似,除IAM頭外,剩下空間的每一位(bit)均對應着一個與IAM相關的Extent。若某bit位為1,則表明該bit位所關聯的Extent已被分配給該IAM,反之未被分配。若一個IAM頁面大小為8K,則除IAM頭(64 bytes)外,一個IAM頁面所能覆蓋的文件範圍是: (81024-64)8(88K),約4GB空間。

但與GAM也不同之處在于:IAM的出現位置不固定,隻在在創建數據庫對象的時候才分配。


三、邏輯與物理存儲關系

1、邏輯關系存在表空間;

2、表空間存在對應的數據文件中;

新創建的數據庫對應的數據文件的名稱:

Catalog表空間 – databasename.dbf System表空間 – Udatabasename.dbf Temp表空間-- Tdatabasename.dbf

前面加 “U” 前綴代表用戶數據表空間,用于保存用戶表的數據。

不帶 U 代表 是系統表的表空間,用于保存系統表的數據。

U 前綴的數據文件代表的表空間名為PG。

不帶U 的數據文件代表的表空間為 CATALOG。


四、數據庫文件、表空間、其他文件之間的關系

1、關系圖如下:

說明:

1)每一個數據庫具有一個或多個數據文件,用戶存放數據庫的所有數據。

2)數據庫的數據文件有以下特征:

一個數據庫文件隻能與一個數據庫的一個表空間相連。

一個表空間可以由多個數據文件組成。

3)數據庫對象與文件關系:

數據庫對象放到表空間中。

表空間有多個數據文件。

表空間中有多個數據庫對象。

4)數據庫對象邏輯上是存儲在表空間中,物理上是存儲在與表空間相關聯的數據文件中。

2、數據庫包含的文件種類:

1)數據庫文件:data/DB

數據庫對象,如:數據庫、表,索引,序列等對象。

2)控制文件:data/CTL

用來記錄數據庫集群的狀态信息,如:版本信息、集群所管理的各種文件信息、檢查點信息、事務狀态信息等。

3)日志文件:data/REDOLOG

記錄數據修改操作的日志,用于系統發生故障時進行數據恢複。

4)臨時文件:data/DB

存放數據庫進行計算的過程中,生成的各種中間對象,如排序運算的外存歸并單元。

5)參數文件:data目錄下


五、Postgresql 底層存儲管理方式:

Postgresql的每個數據庫均存放在一個目錄中,以db_oid命名,該目錄中存放每個表對應的文件,文件名以該數據表對應的relfilenode_oid命名。當表中的數據量足夠大,導緻表文件的大小大于1GB的時候,postgresql會自動創建新的文件用于存放新插入的數據。新文件的名稱為: relfilenode_iod.1, relfilenode_iod.2 等。使用該策略是為了防止在某些文件系統中,最大支持文件尺寸不能大于1GB的情形。

db_oid, relfilenode_oid可以從pg_class系統表中查詢得出。

每個table對應的文件内部又按照Page的方式組織。每個Page的大小默認為8KB。所以每個數據庫對應文件的Disk 分布由下圖所示:

每個Page中包含Page Header以及Data段,Page Header中,pg_lower指向Free Space的起始地址,pg_upper指向Free Space的結束地址。

Data 段中,包含有: ItemIdData 段,Free Space段, Items段 以及Special space段。

ItemIdData 段: Array of (offset,length) pairs pointing to the actual items. 4 bytes per item.

Free Space 段:The unallocated space. New item pointers are allocated from the start of this area, new items from the end.

Items 段: The actual items themselves.

Special space 段: Index access method specific data. Different methods store different data. Empty in ordinary tables.

Item的存儲是從pg_upper向pg_lower(類似堆)方向增長。ItenIdData的存儲是從pg_lower向pg_upper方向增長(類似棧)。


後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注一下~

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved