PostgreSQL:記憶體結構

天翼雲開發者社群發表於2023-02-17

在 Postgresql 中,記憶體大概被分為兩塊

  • Local memory area:為每一個 backend process 分配的記憶體

  • Shared memory area:PostgreSQL server 所有的 backgroud process 使用的記憶體

Local memory area 

每一個backend process 都會分配一塊local memory area, 每一塊區域又分為三個子區域 ,見下表

sub-area description
work_mem 使用者在 sort、distinct、merge join、hash join 的時候會用到這塊區域
maintenance_work_mem vacuum、reindex、create index 等操作會用到這塊區域
temp_buffers 儲存臨時表會用到這塊區域

Shared memory area 

這塊區域在伺服器啟動的時候分配,這塊區域也是分為好幾個子區域,見下面介紹

sub-area description
shared buffer pool 將表或者索引的 page 從磁碟載入到 shared buffer,然後在shared buffer 操作
WAL buffer 在服務端出現問題的時候,確保資料不會丟失,在寫到磁碟之前,wal buffer 是 wal log 的快取區域
commit log 為了併發控制所有事物的狀態的保持而分配的區域

另外,Postgresql 還分配一些其他的記憶體區域:

  • 為訪問控制分配的子區域,比如輕量級鎖,共享或者專有鎖。

  • 為其他 backgroud process 提供的子區域,比如檢查點、vacuum。

  • 為事物處理提供的子區域,比如事物中的儲存點,和二階段事物提交。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2716598/,如需轉載,請註明出處,否則將追究法律責任。

相關文章