第二章 PostgreSQL程序和記憶體體系結構

2021-10-16 13:25:38 字數 3050 閱讀 4120

悄悄放一張:

postgresql運維技術 

本章總結了postgresql的程序架構和記憶體架構。

postgresql是乙個客戶端/伺服器型別的關聯式資料庫管理系統,具有多程序架構,執行在單個主機上。

多個程序協同管理乙個資料庫集群通常被稱為「postgresql server」,它包含以下型別的程序:

backend 程序:每個backend程序處理由連線的客戶機發出的所有查詢和語句。

background 程序:不同的background 程序執行不同特性的程序(例如,vacuum程序和checkpoint程序),用於資料庫管理。

replication associated 程序:與複製相關的程序負責執行流複製。

background worker 程序:background worker process程序可以執行使用者實現的任何處理。

圖 2.1.postgresql程序架構示例

這張圖顯示了乙個postgresql伺服器的程序:乙個postgres伺服器程序,兩個backend程序,七個background程序和兩個客戶端程序。還演示了資料庫集群、共享記憶體和兩個客戶機程序。

如上所述,postgres伺服器程序是postgresql伺服器中所有程序的父程序。在早期的版本中,它被稱為postmaster。

通過執行帶有start選項的pg_ctl程式,postgres伺服器程序將啟動。然後,它在記憶體中分配乙個共享記憶體區域,啟動各種background程序,必要時啟動與複製相關的程序和background workers程序,並等待客戶機的連線請求。每當收到來自客戶機的連線請求時,它就啟動backend程序。(然後,啟動的backend程序處理連線的客戶端發出的所有查詢。)

backend程序也稱為postgres,由postgres伺服器程序啟動,並處理由乙個連線的客戶機發出的所有查詢。它通過乙個tcp連線與客戶機通訊,並在客戶機斷開連線時終止。

因為它只允許操作乙個資料庫,所以在連線到postgresql伺服器時,必須明確指定想要使用的資料庫。

允許多個客戶端同時連線;配置引數max_connections控制客戶機的最大數量(預設為100)。

如果許多客戶端(如web應用程式)頻繁地重複連線和斷開與postgresql伺服器的連線,這會增加建立連線和建立後端程序的成本,因為postgresql沒有實現本機連線池特性。這種情況會對資料庫伺服器的效能產生負面影響。為了處理這種情況,通常使用池中介軟體(pgbouncer或pgpool-ii)。

表2.1: background 程序

程序描述

background writer

在這個過程中,共享緩衝池中的髒頁會被逐步地定期寫入持久儲存(例如,hdd、ssd)。

checkpointer

負責執行checkpoint。

autovacuum launcher

負責執行autovacuum。

wal writer

該程序定期將wal緩衝區中的wal資料寫入並重新整理到持久儲存中。

statistics collector

在這個過程中,會收集諸如pg_stat_activity和pg_stat_database等統計資訊。

logging collector (logger)

此程序將錯誤訊息寫入日誌檔案。

archiver

在此過程中,將執行歸檔日誌記錄。

postgresql的記憶體體系結構可以分為兩大類:

local memory area 本地記憶體區域——由每個後端程序分配供自己使用。

shared memory area 共享記憶體區域——由postgresql伺服器的所有程序使用。

圖. 2.2. memory architecture in postgresql

每個backend程序分配乙個本地記憶體區域用於查詢處理;每個區域又分為幾個子區域,子區域的大小可以是固定的,也可以是可變的。表2.2列出了主要的子區域。

表 2.2: local memory area

子區域描述

work_mem

executor使用此區域按順序和不同的操作對元組進行排序,並使用merge-join和hash-join操作來連線表。

maintenance_work_mem

某些維護操作(如vacuum, reindex)使用這個區域。

temp_buffers

executor使用此區域儲存臨時表。

共享記憶體區域由postgresql伺服器在啟動時分配。這個區域也被劃分為幾個固定大小的子區域。表2.3列出了主要的子區域。

表 2.3: shared memory area

子區域描述

shared buffer pool

postgresql將表和索引中的頁面從持久儲存載入到這裡,並直接操作它們。

wal buffer

為了保證資料不因伺服器故障而丟失,postgresql支援wal機制。wal data(也稱xlog records)是postgresql中的事務日誌;wal buffer是wal資料寫入持久儲存之前的緩衝區域。

commit log

提交日誌(clog)儲存所有事務(如in_progress,committed,aborted)的狀態,用於併發控制(cc)機制。

除了上面提到的本地記憶體區域和共享記憶體區域,postgresql還分配了如下幾個區域:

子區域用於各種訪問控制機制。(例如,訊號量、輕量級鎖、共享鎖和排他鎖等)

用於各種後台程序的子區域,如checkpointer和autovacuum。

事務處理的子區域,比如儲存點和兩階段提交。

等等。

第二章 程序通訊

1 低階通訊 程序之間的互斥和同步 訊號量機制是有效的同步工具,但作為通訊工具缺點如下 1 效率低 通訊量少 2 通訊對使用者不透明 程式設計師實現,作業系統只提供共享儲存器供 操作 2 高階程序通訊 使用者直接利用作業系統提供的一組通訊命令,高效地傳送大量資料的通訊方式。作業系統隱藏了程序通訊的細...

程序管理2《第二章》

處理機排程的基本概念 排程的實質是一種資源分配,處理機排程是對處理機資源進行分配。處理機排程層次 高階排程 長程排程,作業排程 在需要從外存調入乙個作業到記憶體時發生。中級排程 記憶體排程 記憶體緊張時需要調出乙個程序或者空閒時調出的程序調回記憶體。低階排程 程序排程,短程排程 執行的程序放棄cpu...

第二章 程序管理

報考的是三系老師 不是搞硬體的 但由於自己考研時選的科目有作業系統,所以 大致看一下了解即可 1 程序通訊 第一 共享儲存 第二 訊息傳遞 分為直接通訊方式 和 信箱通訊方式 第三 管道通訊 1 排程的層次 第一 作業排程 高階排程 按一定原則從外村上處於後備狀態的作業中挑選乙個 或多個 作業,給它...