成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PostgreSQL數據目錄深度揭秘

開發 開發工具 PostgreSQL
PostgreSQL是一個功能非常強大的、源代碼開放的客戶/服務器關系型數據庫管理系統(RDBMS),PostgreSQL被業界譽為“先進的開源數據庫”,支持NoSQL數據類型(JSON/XML/hstore),主要面向企業復雜查詢SQL的OLTP業務場景,提供PostGIS地理信息引擎、阿里云自研多維多模時空信息引擎等。

[[420955]]

一、概述

PostgreSQL是一個功能非常強大的、源代碼開放的客戶/服務器關系型數據庫管理系統(RDBMS),PostgreSQL被業界譽為“先進的開源數據庫”,支持NoSQL數據類型(JSON/XML/hstore),主要面向企業復雜查詢SQL的OLTP業務場景,提供PostGIS地理信息引擎、阿里云自研多維多模時空信息引擎等。

本文著重介紹PostgreSQL的數據目錄,其中保存著配置文件、數據文件、事務日志和WAL日志等重要文件,所有客戶創建的數據文件和初始配置文件都可以在數據目錄中找到,因此數據目錄是重要的客戶價值所在。

二、名詞

1.OID

數據庫對象是數據庫存儲或引用的數據結構體,數據庫本身也是數據庫對象,同時包括表、索引、視圖、序列和函數等。Object ID是數據庫對象的唯一標識符,保存在無符號四字節的整形變量中,所有數據庫對象各自對應一個OID。PostgreSQL有兩個視圖各司其職,分別保存著不同類別的OID,其中pg_database保存數據庫本身對象的OID,pg_class保存表、索引和序列等對象的OID。

2.Relation

關系代表非數據庫本身的數據庫對象,包括表、視圖、索引和toast等,不包括數據庫本身。

3.MVCC

Multi-Version-Concurrency-Control是一種并發控制機制,數據庫引擎根據不同的事務隔離級別,通過查詢事務快照和事務提交日志來完成元組的可見性檢查。如果希望理解數據庫機制原理,MVCC是必不可少的學習知識。

4.Page

數據庫文件在Linux平臺被劃分為默認8K固定長度的page進行管理,通過啟動參數BLCKSZ可以預設page的大小。如果page設低了,相同數據量的文件需要分裂成更多的page,IO次數和索引分裂次數都會增加,性能會降低較多;如果page設高了,page內部的數據檢索效率會降低,性能一樣會降低不少,一般來說8K和16K對于數據庫系統來說是最優解。

三、數據目錄

數據目錄默認在/var/lib/pgsql/data下,支持使用環境變量$PG_DATA管理。下圖所示是數據目錄的一級結構,后續會重點介紹具有代表性的重要文件和目錄,比如base、pg_xact等。

四、base

1.概述

base目錄存儲用戶創建的數據庫文件,及隸屬于用戶數據庫的所有關系,比如表、索引等。

2.一級目錄

目錄結構分為兩級,第一級結構如下圖所示,一級目錄名是用戶數據庫對象的OID,1代表的是postgres數據庫,一級目錄內的二級子文件都是隸屬于該數據庫對象的關系,包括表、索引、視圖等。

3.二級文件

二級子文件如下圖所示,存儲著某個數據庫內的所有關系,包括表、索引、視圖等,這里以postgres數據庫目錄示例。二級子文件分為三大類,第一類是以關系OID命名的主數據文件,第二類是文件名以_fsm結尾的空閑空間映射文件,第三類是文件名以_vm結尾的可見性映射文件。

4.主數據文件

主數據文件存儲隸屬于對應數據庫下的數據庫關系文件,包括數據、索引等,客戶最重要的業務數據便是存儲在主數據文件中。

當關系文件大小低于RELSEG_SIZE × BLCKSZ時,數據庫引擎創建名稱為pg_class.relfilenode的單文件,反之會切分為名稱如pg_class.relfilenode.segno的多個文件。單個關系文件內部被劃分為默認8K固定大小的多個page并存儲在磁盤上,8K可以在initdb時通過BLCKSZ參數修改配置。主數據文件寫入時,會先將元組數據從行指針數組的底部開始堆疊,直到空間耗盡。

用戶通過SQL查詢到的單行數據記錄對應單個元組(tuple),因為MVCC機制的原因,元組可能是無法查詢到舊版本數據,也可能是活躍的新版本數據,舊版本數據會在未來的某個時刻被清理。當查詢沒有命中索引觸發順序掃描時,數據庫引擎順序掃描page的行指針讀取到元組,反之如果命中B樹索引,引擎會通過索引文件的元組,通過索引鍵的TID值讀取到元組。

下圖是主數據文件的層級結構。

下表格是上圖所示page內部結構的元數據信息。

下表格是上圖所示tuple內部結構的元數據信息。

5.FSM

FSM是空閑空間映射文件,記錄著heap和index的每個page的空閑空間信息,有利于快速定位到有充足空閑空間的page以便存儲tuple,如果沒有定位到則需要擴展新page。除了Hash Index文件沒有FSM文件,其他heap和index都需要FSM文件。

總體上,FSM采用3-4級多叉樹的結構組織FSM page,單個FSM page內部采用完全二叉樹的結構進行管理,高級別FSM page的葉子節點關聯低級別的FSM page,低級別FSM Page的葉子節點存儲著heap、index page的可用空間數目,而非葉子結點依次存儲葉子節點的最大可用空間數目,每個節點占用1個字節。

6.VM

VM是可見性映射文件,記錄著每個heap page的可見性信息,因此index page并沒有vm文件。一方面它可以提高vacumn的執行效率,另一方面通過vm文件可以感知到page內的元組是否全部可見,如果全部可見的話,查詢引擎查詢索引元組直接獲取到數據即可,不必再訪問數據元組檢查可見性,減少了回表次數,極大提升了查詢的效率。

VM采用位圖的結構存儲可見性信息,每個heap page只在vm文件中存儲2位,第一位代表元組是否全部可見,第二位代表元組是否全部被凍結。

  1. #define VISIBILITYMAP_ALL_VISIBLE  0x01 
  2. #define VISIBILITYMAP_ALL_FROZEN  0x02 

五、global

1.概述

global目錄存儲pg_control及數據庫集群維度的數據庫及其關系,非客戶維度的數據,例如pg_database、pg_class等。目錄內的文件結構和base是一致的。

global目錄文件結構如下圖所示。

2.pg_control

pg_control文件記錄數據庫集群控制信息,包括initdb初始化、WAL和checkpoint的信息。

六、pg_wal

1.概述

pg_wal是WAL機制中的wal日志存儲目錄。PG10及之后的高版本改目錄名為pg_wal,10之前目錄名稱是pg_xlog。

2.WAL機制

Write-Ahead-Logging:日志先行機制。數據變更優先寫入日志文件,事務失敗則變更記錄被忽略,事務成功再選擇合適時機寫入數據文件,數據的刷盤速度慢于日志刷盤速度。當數據庫系統崩潰后,引擎會從上一次成功的checkpoint點開始依次重放wal記錄,如果LSN>pd_lsn則重放wal記錄,反之跳過,確保數據記錄恢復到崩潰前的狀態。

3.文件結構

4.wal segment

wal段文件存儲著數據庫行記錄明細,每一條記錄明細都是服務于數據庫恢復操作的,確保前后數據一致。首先針對數據的任意一次修改操作均被記錄在wal段文件中,包括insert、update和delete,其次系統的一些管理行為也會被記錄在wal段文件中,例如事務提交和vacuum等行為。

wal段文件命名形如00000001 00000001 00000092,文件名共24位,前8位是timeline,中間8位是logid,后8位是logseg,logseg的前6位始終是0,后2位是lsn的前2位。根據wal段文件名的最后2位,wal記錄根據對應的LSN分別記錄在不同的wal段文件中。

5.history

.history文件內容包括原.history文件,當前時間線切換記錄和切換原因,作用于數據庫的時間點恢復行為。當數據庫引擎從多個時間線的備份中恢復時,數據庫從.history文件中找到從pg_control的start_timeline到指定的recovery_target_timeline間的所有wal段文件進行恢復。

6.archive_status

archive_status是wal段文件的備份目錄,包括.ready和.done文件。超出wal_keep_segments數目限制的wal日志會在archive_status目錄內被打標,歸檔操作完成后被進一步移除。

7.ready

.ready是同名wal段文件在archive_status目錄內的標記文件,代表該wal段文件可被歸檔。wal段文件在數據目錄中的存儲文件數量是有上限的,一般通過wal_keep_segments參數來約束,因此數據庫引擎在wal段文件個數達到上限后會在archive_status目錄內增加可移除的wal段文件的標記文件,文件名是原wal段文件名后增加.ready后綴,等待歸檔工具進行歸檔。

8.done

.done是同名wal段文件在archive_status目錄內的標記文件,代表該wal段文件已被歸檔,可以被清理。數據庫引擎默認通過archive_command命令對.ready文件進行歸檔,歸檔成功與否取決于archive_command命令返回true還是false,當archive_command返回true時,代表與.ready文件同名的wal段文件已被歸檔,引擎再將該文件的擴展名重命名為.done,等待數據庫引擎在下一次的checkpoint時進一步清理原wal段文件。

七、pg_xact

1.概述

pg_xact是事務提交日志(Commit Log)的存儲目錄,事務提交日志默認256KB,文件名形如NNNN,系統初始化后從0000開始遞增至FFFF。PG 10及之后的高版本改目錄名為pg_xact,10之前目錄名稱是pg_clog。

下圖是pg_xact目錄下的clog文件,027E前的文件因為事務已被凍結,所以被vacuum清理完畢。

2.Commit Log

事務提交日志存儲數據庫的單個事務運行狀態。Commit Log由共享內存中一組8KB的page組成,每個page包含一列數組,每個數組元素包含XID和該事物的實時狀態。當page不足時,創建新的page來存儲新的事務。

八、配置文件

1.postgresql.conf

postgresql.conf文件存儲著配置文件的位置、資源限制、集群復制等參數數據,是數據庫運行時最重要的配置文件。

2.postgresql.auto.conf

postgresql.auto.conf文件存儲著數據庫的全局配置參數,數據庫引擎在啟動時加載postgresql.auto.conf文件后,覆蓋postgresql.conf文件中已有的配置,形成最終的數據庫啟動配置。

3.pg_hba.conf

pg_hba.conf文件負責客戶端的連接和認證,起到防火墻的作用,格式是:TYPE / DATABASE / USER / ADDRESS / METHOD。

九、總結 

本文從肉眼可見的數據目錄及其子文件開始展開,由淺入深直到不可見的源碼結構體維度,詳細介紹了數據目錄及其子文件的結構和作用。大家通過了解數據目錄的文件體系結構,能夠對PostgreSQL數據庫全貌有個總體概覽,無論是日常運維、內核研發,還是業務開發,這些都是必須掌握的基礎知識。

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2024-11-05 10:52:07

2020-09-04 06:34:25

5GTDDGNSS

2023-03-26 19:18:27

2018-05-25 10:05:13

大數據架構實戰

2012-07-20 12:41:50

Office 2013微軟

2024-04-26 08:42:17

PostgreSQL數據庫數據導入導出

2019-07-24 06:05:32

2016-04-07 18:43:16

2024-12-30 11:34:55

2025-03-26 03:00:00

2014-01-05 17:08:09

PostgreSQL數據類型

2010-05-26 19:36:34

SVN目錄結構

2025-05-14 04:00:00

2017-12-22 07:31:41

2018-07-03 15:56:59

騰訊

2014-09-17 10:49:40

2017-09-28 14:48:46

支付寶深度學習xNN

2011-05-06 16:25:15

復印機故障

2024-07-01 13:58:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女黄频| 久久精品亚洲欧美日韩久久 | 欧洲一区二区在线 | 激情在线视频 | 国产美女一区二区三区 | 国产一区二区在线免费观看 | 国产精品久久久久久福利一牛影视 | 日日综合 | h视频在线看 | www.日韩系列| 国产亚洲一区精品 | 操人网 | 日日操网站 | 日本午夜免费福利视频 | 视频一区二区三区四区五区 | 欧美国产一区二区 | 国产一区二区在线免费视频 | 在线视频h | 福利一区二区在线 | 国产精品久久久久久久久久久免费看 | 欧美成人精品在线观看 | 高清成人免费视频 | 蜜桃久久 | 精品福利一区二区三区 | 国产一区二区视频免费在线观看 | 国产网站在线免费观看 | 国产一级电影在线 | 欧美国产日韩一区二区三区 | www.成人免费视频 | 久久久91精品国产一区二区三区 | 欧美日韩精品久久久免费观看 | 日韩在线中文 | 五月天婷婷丁香 | 九九九视频在线观看 | 免费黄色网址视频 | 欧美夜夜 | 99精品在线| 国内毛片毛片毛片毛片 | 欧美日韩在线一区二区 | 不卡av电影在线播放 | 高清国产一区二区 |