超詳細的PostgreSQL體系結(jié)構(gòu)總結(jié),,值得收藏https://www.toutiao.com/i6715390855772897800/ ? 原創(chuàng)?波波說運維?2019-07-26 00:03:00概述今天本文主要從日志文件、參數(shù)文件,、控制文件,、數(shù)據(jù)文件、redo日志(WAL),、后臺進程這六個方面來介紹一下PostgreSQL的架構(gòu),。 架構(gòu)PostgreSQL的主要架構(gòu)如下: ? 一,、日志文件1,、日志文件種類 1)$PGDATA/log 運行日志(pg10之前為$PGDATA/pg_log) 2)$PGDATA/pg_wal 重做日志(pg10之前為$PGDATA/pg_xlog) 3)$PGDATA/pg_xact 事務(wù)提交日志(pg10之前為$PGDATA/pg_clog) 4)服務(wù)器日志,可以在啟動的時候指定,,比如pg_ctl start -l ./alert.log 2,、 運行日志 運行日志主要相關(guān)的參數(shù)如下,默認沒有開啟的話沒有l(wèi)og目錄,,開啟后會自動生成,。 ? 3、事務(wù)日志pg_xact pg_xact是事務(wù)提交日志,,記錄了事務(wù)的元數(shù)據(jù),。默認開啟。內(nèi)容一般不能直接讀,。 4,、 服務(wù)器日志 如果用pg_ctl啟動的時候沒有指定-l參數(shù)來指定服務(wù)器日志,錯誤可能會輸出到cmd前臺,。服務(wù)器日志記錄了數(shù)據(jù)庫的重要信息,。 lsof或許可以過濾出在寫的日志文件 $lsof -c postgres| grep REG | grep -v /usr | grep -v /dev | grep -v /SYS ? 二、參數(shù)文件1,、 postgresql.conf pg的主要參數(shù)文件,,有很詳細的說明和注釋,和Oracle的pfile,,MySQL的my.cnf類似,。默認在$PGDATA下。很多參數(shù)修改后都需要重啟,。9.6之后支持了alter system來修改,,修改后的會存在$PGDATA/postgresql.auto.conf下,可以reload或者 restart來使之生效,。 主要的參數(shù)如下: ? 2,、pg_hba.conf 這個是黑白名單的設(shè)置,。文件里有詳細的參數(shù)說明,默認參數(shù)如下: type?列有l(wèi)ocal,,host,,hostssl,hostnossl四種,。local是本地認證 database?可以是all,,或者指定的數(shù)據(jù)庫 user列可以是all,或者具體的用戶 address?可以是ip或者網(wǎng)段 method比較重要,,有"trust", "reject", "md5", "password", "scram-sha-256", "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"這么多可選,。trust是免密登錄;reject是黑名單拒絕;md5是加密的密碼,;password是沒有加密的密碼,;ident是Linux下PostgreSQL默認的local認證方式,凡是能正確登錄服務(wù)器的操作系統(tǒng)用戶(注:不是數(shù)據(jù)庫用戶)就能使用本用戶映射的數(shù)據(jù)庫用戶不需密碼登錄數(shù)據(jù)庫 3,、 pg_ident.conf pg_ident.con是用戶映射配置文件,。結(jié)合pg_hba.connf中,method為ident可以用特定的操作系統(tǒng)用戶和指定的數(shù)據(jù)庫用戶登錄數(shù)據(jù)庫,。如下: pg_ident.conf如下: pg_hba.conf如下: 三,、控制文件1、 控制文件位置 $PGDATA/global/pg_control 控制文件在數(shù)據(jù)庫目錄的global目錄下,??刂莆募涗浟藬?shù)據(jù)庫的重要信息。 2,、 查看控制文件 pg_controldata可以查看控制文件的內(nèi)容 $ pg_controldata $PGDATA controlfile記錄了數(shù)據(jù)庫運行的一些信息,,比如數(shù)據(jù)庫id,,是否open,,wal的位置,checkpoint的位置,,等等,。controlfile是很重要的文件,數(shù)據(jù)庫部署和調(diào)整,。 四,、數(shù)據(jù)文件1、page pg中,,每個索引和表都是一個單獨的文件,,pg中叫做page。默認是每個大于1G的page會被分割pg_class.relfilenode.1這樣的文件,。 Page默認大小為8KB,,最大32KB,一個數(shù)據(jù)塊中可存放多行的數(shù)據(jù),。塊中的結(jié)構(gòu)如下圖: 塊頭記錄了如下信息:
行指針中表示行內(nèi)容的偏移量是15bit,能表示的最大偏移量是2^15=32768,因此塊的最大大小是32768,,即32KB,。 2、page物理位置 page的物理位置在$PGDATA/BASE/DATABASE_OID/PG_CLASS.RELFILENODE 需要注意的是,,pg_class.relfilenode類似dba_objects.data_object_id,,truncate表之后relfilenode會變。對應(yīng)的物理文件名字也會變,。 五,、WAL日志1、wal位置 wal在$PGDATA/pg_wal下,。10之前為pg_xlog 2,、wal命名格式 文件名稱為16進制的24個字符組成,每8個字符一組,,每組的意義如下 3、手動切換WAL日志的命令 在PG10之前: highgo=# select pg_switch_xlog(); 在PG10之后: highgo=# select pg_switch_wal(); 六,、后臺進程pg后臺進程說明如下: ? 來源:https://www./content-2-496051.html |
|