日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PostgreSQL數(shù)據(jù)目錄深度揭秘

一、概述

PostgreSQL是一個(gè)功能非常強(qiáng)大的、源代碼開(kāi)放的客戶/服務(wù)器關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),PostgreSQL被業(yè)界譽(yù)為“先進(jìn)的開(kāi)源數(shù)據(jù)庫(kù)”,支持NoSQL數(shù)據(jù)類型(JSON/XML/hstore),主要面向企業(yè)復(fù)雜查詢SQL的OLTP業(yè)務(wù)場(chǎng)景,提供PostGIS地理信息引擎、阿里云自研多維多模時(shí)空信息引擎等。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)前進(jìn)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

二、名詞

1.OID

數(shù)據(jù)庫(kù)對(duì)象是數(shù)據(jù)庫(kù)存儲(chǔ)或引用的數(shù)據(jù)結(jié)構(gòu)體,數(shù)據(jù)庫(kù)本身也是數(shù)據(jù)庫(kù)對(duì)象,同時(shí)包括表、索引、視圖、序列和函數(shù)等。Object ID是數(shù)據(jù)庫(kù)對(duì)象的唯一標(biāo)識(shí)符,保存在無(wú)符號(hào)四字節(jié)的整形變量中,所有數(shù)據(jù)庫(kù)對(duì)象各自對(duì)應(yīng)一個(gè)OID。PostgreSQL有兩個(gè)視圖各司其職,分別保存著不同類別的OID,其中pg_database保存數(shù)據(jù)庫(kù)本身對(duì)象的OID,pg_class保存表、索引和序列等對(duì)象的OID。

2.Relation

關(guān)系代表非數(shù)據(jù)庫(kù)本身的數(shù)據(jù)庫(kù)對(duì)象,包括表、視圖、索引和toast等,不包括數(shù)據(jù)庫(kù)本身。

3.MVCC

Multi-Version-Concurrency-Control是一種并發(fā)控制機(jī)制,數(shù)據(jù)庫(kù)引擎根據(jù)不同的事務(wù)隔離級(jí)別,通過(guò)查詢事務(wù)快照和事務(wù)提交日志來(lái)完成元組的可見(jiàn)性檢查。如果希望理解數(shù)據(jù)庫(kù)機(jī)制原理,MVCC是必不可少的學(xué)習(xí)知識(shí)。

4.Page

數(shù)據(jù)庫(kù)文件在Linux平臺(tái)被劃分為默認(rèn)8K固定長(zhǎng)度的page進(jìn)行管理,通過(guò)啟動(dòng)參數(shù)BLCKSZ可以預(yù)設(shè)page的大小。如果page設(shè)低了,相同數(shù)據(jù)量的文件需要分裂成更多的page,IO次數(shù)和索引分裂次數(shù)都會(huì)增加,性能會(huì)降低較多;如果page設(shè)高了,page內(nèi)部的數(shù)據(jù)檢索效率會(huì)降低,性能一樣會(huì)降低不少,一般來(lái)說(shuō)8K和16K對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō)是最優(yōu)解。

三、數(shù)據(jù)目錄

數(shù)據(jù)目錄默認(rèn)在/var/lib/pgsql/data下,支持使用環(huán)境變量$PG_DATA管理。下圖所示是數(shù)據(jù)目錄的一級(jí)結(jié)構(gòu),后續(xù)會(huì)重點(diǎn)介紹具有代表性的重要文件和目錄,比如base、pg_xact等。

四、base

1.概述

base目錄存儲(chǔ)用戶創(chuàng)建的數(shù)據(jù)庫(kù)文件,及隸屬于用戶數(shù)據(jù)庫(kù)的所有關(guān)系,比如表、索引等。

2.一級(jí)目錄

目錄結(jié)構(gòu)分為兩級(jí),第一級(jí)結(jié)構(gòu)如下圖所示,一級(jí)目錄名是用戶數(shù)據(jù)庫(kù)對(duì)象的OID,1代表的是postgres數(shù)據(jù)庫(kù),一級(jí)目錄內(nèi)的二級(jí)子文件都是隸屬于該數(shù)據(jù)庫(kù)對(duì)象的關(guān)系,包括表、索引、視圖等。

3.二級(jí)文件

二級(jí)子文件如下圖所示,存儲(chǔ)著某個(gè)數(shù)據(jù)庫(kù)內(nèi)的所有關(guān)系,包括表、索引、視圖等,這里以postgres數(shù)據(jù)庫(kù)目錄示例。二級(jí)子文件分為三大類,第一類是以關(guān)系OID命名的主數(shù)據(jù)文件,第二類是文件名以_fsm結(jié)尾的空閑空間映射文件,第三類是文件名以_vm結(jié)尾的可見(jiàn)性映射文件。

4.主數(shù)據(jù)文件

主數(shù)據(jù)文件存儲(chǔ)隸屬于對(duì)應(yīng)數(shù)據(jù)庫(kù)下的數(shù)據(jù)庫(kù)關(guān)系文件,包括數(shù)據(jù)、索引等,客戶最重要的業(yè)務(wù)數(shù)據(jù)便是存儲(chǔ)在主數(shù)據(jù)文件中。

當(dāng)關(guān)系文件大小低于RELSEG_SIZE × BLCKSZ時(shí),數(shù)據(jù)庫(kù)引擎創(chuàng)建名稱為pg_class.relfilenode的單文件,反之會(huì)切分為名稱如pg_class.relfilenode.segno的多個(gè)文件。單個(gè)關(guān)系文件內(nèi)部被劃分為默認(rèn)8K固定大小的多個(gè)page并存儲(chǔ)在磁盤上,8K可以在initdb時(shí)通過(guò)BLCKSZ參數(shù)修改配置。主數(shù)據(jù)文件寫入時(shí),會(huì)先將元組數(shù)據(jù)從行指針數(shù)組的底部開(kāi)始堆疊,直到空間耗盡。

用戶通過(guò)SQL查詢到的單行數(shù)據(jù)記錄對(duì)應(yīng)單個(gè)元組(tuple),因?yàn)镸VCC機(jī)制的原因,元組可能是無(wú)法查詢到舊版本數(shù)據(jù),也可能是活躍的新版本數(shù)據(jù),舊版本數(shù)據(jù)會(huì)在未來(lái)的某個(gè)時(shí)刻被清理。當(dāng)查詢沒(méi)有命中索引觸發(fā)順序掃描時(shí),數(shù)據(jù)庫(kù)引擎順序掃描page的行指針讀取到元組,反之如果命中B樹(shù)索引,引擎會(huì)通過(guò)索引文件的元組,通過(guò)索引鍵的TID值讀取到元組。

下圖是主數(shù)據(jù)文件的層級(jí)結(jié)構(gòu)。

下表格是上圖所示page內(nèi)部結(jié)構(gòu)的元數(shù)據(jù)信息。

下表格是上圖所示tuple內(nèi)部結(jié)構(gòu)的元數(shù)據(jù)信息。

5.FSM

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

總體上,F(xiàn)SM采用3-4級(jí)多叉樹(shù)的結(jié)構(gòu)組織FSM page,單個(gè)FSM page內(nèi)部采用完全二叉樹(shù)的結(jié)構(gòu)進(jìn)行管理,高級(jí)別FSM page的葉子節(jié)點(diǎn)關(guān)聯(lián)低級(jí)別的FSM page,低級(jí)別FSM Page的葉子節(jié)點(diǎn)存儲(chǔ)著heap、index page的可用空間數(shù)目,而非葉子結(jié)點(diǎn)依次存儲(chǔ)葉子節(jié)點(diǎn)的最大可用空間數(shù)目,每個(gè)節(jié)點(diǎn)占用1個(gè)字節(jié)。

6.VM

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

VM采用位圖的結(jié)構(gòu)存儲(chǔ)可見(jiàn)性信息,每個(gè)heap page只在vm文件中存儲(chǔ)2位,第一位代表元組是否全部可見(jiàn),第二位代表元組是否全部被凍結(jié)。

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

五、global

1.概述

global目錄存儲(chǔ)pg_control及數(shù)據(jù)庫(kù)集群維度的數(shù)據(jù)庫(kù)及其關(guān)系,非客戶維度的數(shù)據(jù),例如pg_database、pg_class等。目錄內(nèi)的文件結(jié)構(gòu)和base是一致的。

global目錄文件結(jié)構(gòu)如下圖所示。

2.pg_control

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

六、pg_wal

1.概述

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

2.WAL機(jī)制

Write-Ahead-Logging:日志先行機(jī)制。數(shù)據(jù)變更優(yōu)先寫入日志文件,事務(wù)失敗則變更記錄被忽略,事務(wù)成功再選擇合適時(shí)機(jī)寫入數(shù)據(jù)文件,數(shù)據(jù)的刷盤速度慢于日志刷盤速度。當(dāng)數(shù)據(jù)庫(kù)系統(tǒng)崩潰后,引擎會(huì)從上一次成功的checkpoint點(diǎn)開(kāi)始依次重放wal記錄,如果LSN>pd_lsn則重放wal記錄,反之跳過(guò),確保數(shù)據(jù)記錄恢復(fù)到崩潰前的狀態(tài)。

3.文件結(jié)構(gòu)

4.wal segment

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

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

5.history

.history文件內(nèi)容包括原.history文件,當(dāng)前時(shí)間線切換記錄和切換原因,作用于數(shù)據(jù)庫(kù)的時(shí)間點(diǎn)恢復(fù)行為。當(dāng)數(shù)據(jù)庫(kù)引擎從多個(gè)時(shí)間線的備份中恢復(fù)時(shí),數(shù)據(jù)庫(kù)從.history文件中找到從pg_control的start_timeline到指定的recovery_target_timeline間的所有wal段文件進(jìn)行恢復(fù)。

6.archive_status

archive_status是wal段文件的備份目錄,包括.ready和.done文件。超出wal_keep_segments數(shù)目限制的wal日志會(huì)在archive_status目錄內(nèi)被打標(biāo),歸檔操作完成后被進(jìn)一步移除。

7.ready

.ready是同名wal段文件在archive_status目錄內(nèi)的標(biāo)記文件,代表該wal段文件可被歸檔。wal段文件在數(shù)據(jù)目錄中的存儲(chǔ)文件數(shù)量是有上限的,一般通過(guò)wal_keep_segments參數(shù)來(lái)約束,因此數(shù)據(jù)庫(kù)引擎在wal段文件個(gè)數(shù)達(dá)到上限后會(huì)在archive_status目錄內(nèi)增加可移除的wal段文件的標(biāo)記文件,文件名是原wal段文件名后增加.ready后綴,等待歸檔工具進(jìn)行歸檔。

8.done

.done是同名wal段文件在archive_status目錄內(nèi)的標(biāo)記文件,代表該wal段文件已被歸檔,可以被清理。數(shù)據(jù)庫(kù)引擎默認(rèn)通過(guò)archive_command命令對(duì).ready文件進(jìn)行歸檔,歸檔成功與否取決于archive_command命令返回true還是false,當(dāng)archive_command返回true時(shí),代表與.ready文件同名的wal段文件已被歸檔,引擎再將該文件的擴(kuò)展名重命名為.done,等待數(shù)據(jù)庫(kù)引擎在下一次的checkpoint時(shí)進(jìn)一步清理原wal段文件。

七、pg_xact

1.概述

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

下圖是pg_xact目錄下的clog文件,027E前的文件因?yàn)槭聞?wù)已被凍結(jié),所以被vacuum清理完畢。

2.Commit Log

事務(wù)提交日志存儲(chǔ)數(shù)據(jù)庫(kù)的單個(gè)事務(wù)運(yùn)行狀態(tài)。Commit Log由共享內(nèi)存中一組8KB的page組成,每個(gè)page包含一列數(shù)組,每個(gè)數(shù)組元素包含XID和該事物的實(shí)時(shí)狀態(tài)。當(dāng)page不足時(shí),創(chuàng)建新的page來(lái)存儲(chǔ)新的事務(wù)。

八、配置文件

1.postgresql.conf

postgresql.conf文件存儲(chǔ)著配置文件的位置、資源限制、集群復(fù)制等參數(shù)數(shù)據(jù),是數(shù)據(jù)庫(kù)運(yùn)行時(shí)最重要的配置文件。

2.postgresql.auto.conf

postgresql.auto.conf文件存儲(chǔ)著數(shù)據(jù)庫(kù)的全局配置參數(shù),數(shù)據(jù)庫(kù)引擎在啟動(dòng)時(shí)加載postgresql.auto.conf文件后,覆蓋postgresql.conf文件中已有的配置,形成最終的數(shù)據(jù)庫(kù)啟動(dòng)配置。

3.pg_hba.conf

pg_hba.conf文件負(fù)責(zé)客戶端的連接和認(rèn)證,起到防火墻的作用,格式是:TYPE / DATABASE / USER / ADDRESS / METHOD。

九、總結(jié) 

本文從肉眼可見(jiàn)的數(shù)據(jù)目錄及其子文件開(kāi)始展開(kāi),由淺入深直到不可見(jiàn)的源碼結(jié)構(gòu)體維度,詳細(xì)介紹了數(shù)據(jù)目錄及其子文件的結(jié)構(gòu)和作用。大家通過(guò)了解數(shù)據(jù)目錄的文件體系結(jié)構(gòu),能夠?qū)ostgreSQL數(shù)據(jù)庫(kù)全貌有個(gè)總體概覽,無(wú)論是日常運(yùn)維、內(nèi)核研發(fā),還是業(yè)務(wù)開(kāi)發(fā),這些都是必須掌握的基礎(chǔ)知識(shí)。


本文標(biāo)題:PostgreSQL數(shù)據(jù)目錄深度揭秘
文章源于:http://m.5511xx.com/article/dhojisp.html