PG 程序結構

2022-03-15 09:19:05 字數 2540 閱讀 7140

# 下面分別截圖主從非同步複製程序

主程序postmaster是整個資料庫例項的總控程序,負責啟動和關閉資料庫例項。

主要職責是:

資料庫的啟停

監聽客戶端連線

為每個客戶端連線fork單獨的postgres服務程序

當服務程序出錯時進行修復

管理資料檔案

管理資料庫執行相關的輔助程序

當客戶端呼叫介面向資料庫發起連線請求時,先於postmaster程序建立連線,此時客戶端程式發出身份驗證資訊給主程序postmaster, postmaster主程序進行身份驗證,如果驗證通過,則程序postmaster會fork單獨的服務程序postgres 為客戶端提供服務,此後由postgres服務程序為客戶端執行各種命令,客戶端也不需要postmaster進行中轉,直接與服務程序postgres進行通訊。當某個服務程序出現錯誤時,postmaster主程序會自動完成系統的恢復。恢復過程會停止所有的服務程序,然後進行資料一致性恢復,等恢復完成後,重新接收新連線。

-- 服務程序

當開啟日誌引數時,logger程序收集所有其他(postmaster,服務程序及其它輔助程序)的程序stderr輸出,並將這些輸出寫入到檔案中形成日誌。

引數配置:

vi $/postgresql.conf

logging_collector = 'on'

bgwriter輔助程序是把共享記憶體中的髒頁寫到磁碟上的程序。當往資料庫中插入或更新資料時,並不是會馬上寫到資料檔案中,而是先放在共享記憶體中。bgwriter輔助程序可以周期性地把記憶體中的髒資料重新整理到磁碟中。

所謂wal日誌,即write ahead log,在一些較低的版本中,也稱為xlog。預寫的意思就是在修改資料之前,必須要把這些修改操作記錄到磁碟中,這樣後面更新實際資料時,就不要把資料持久化到檔案中了。即使機器突然宕機或資料庫異常退出導致一部分資料沒有及時的重新整理到磁碟。在資料庫重啟後,通過讀取wal日誌,並把最後一部分wal日誌重新執行一遍,就可以恢復宕機時的狀態。

wal預設儲存在pg_wal資料夾(低版本保持在wal_log/pg_xlog)中,該目錄會產生多個wal日誌,每個wal日誌預設16m, 不需要的wal日誌會被自動覆蓋掉。

-- wal命名格式(檔名稱為16進製制的24個字元組成,每8個字元一組,每組的意義如下:

00000001 00000000 00000001

-------- -------- --------

時間線 邏輯id 物理id

-- wal時間

select pg_walfile_name(pg_current_wal_lsn());

select * from pg_ls_waldir() order by modification asc;

-- pg_waldump檢視wal檔案內容

$/bin/pg_waldump 00000001000000000000000f|more

wal日誌會被迴圈使用,即較早時間的wal日誌會被覆蓋。archive程序負責將wal日誌備份到指定的歸檔目錄。

# 引數配置 $pgdata/postgresql.conf

# - archiving -

#archive_mode = off # enables archiving; off, on, or always

# (change requires restart)

#archive_command = '' # command to use to archive a logfile segment

# placeholders: %p = path of file to archive

# %f = file name only

# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

#archive_timeout = 0 # force a logfile segment switch after this

# number of seconds; 0 disables

checkpointer 是資料庫的檢查點程序

主要做資料的統計收集工作,收集的資訊主要用於查詢優化代價評估。系統表pg_statistic中儲存了stats collector程序收集的各類(表和索引進行了多少次插入,更新,刪除操作,磁碟塊讀寫次數及行的讀寫次數)統計資訊。

PG匯出表結構為Excel

如下圖sql所示 select a.attnum as 序號,這裡是表描述,原本新建資料庫的時候沒有新增表描述,查詢出來會為空,注釋掉就好,有表描述的放開這條注釋 a.attname as 欄位名稱,concat ws t.typname,substring format type a.atttyp...

pg資料庫的結構理解

postgresql官方介紹稱是最先進的開源關係型資料庫,支援所有主流的平台,目前已經更新到了最新版本的12.0,在mysql被oracle收購後,postgresql開源社群越來越活躍了,同時還有分布式集群的開源方案greenplum,目前也非常受歡迎。本篇文章討論postgresql內部的架構,...

pg學習 基本表定義 修改表結構

修改表結構 1 增加字段 highgo d test1 table public.test1 column type modifiers id integer name character varying highgo alter table test1 add addr varchar 20 al...