PostgreSQL記憶體結構

2021-10-12 12:16:05 字數 1216 閱讀 2495

postgresql在啟動後會生成一塊共享記憶體,共享記憶體包括資料塊緩衝區、wal日誌緩衝區以及clog緩衝區。除此之外,共享記憶體還包含程序資訊、統計資訊、鎖資訊、日誌資訊等。

相關引數

shared_buffers:

設定資料庫伺服器將使用的共享記憶體緩衝區大小,通常都會把此值設定的大一些,這樣可以改進效能。一般設定為物理記憶體的 25%,若把 shared_buffers 設定的更大,如超過物理記憶體的 40%,就會發現緩衝的效果並不明顯了,這是因為 postgresql 是執行檔案系統之上的,若檔案系統也有快取,將導致雙快取過多,造成負面影響。

後台服務程序除了訪問共享記憶體外還需要申請一些本地記憶體來儲存一些臨時資料。主要分為臨時緩衝區、work_mem、維護操作記憶體緩衝區。相關變數如下:

temp_buffers:

設定每個資料庫會話使用的臨時緩衝區的最大數目。此本地緩衝區只用於訪問臨時表。臨時緩衝區是在某個連線會話的服務程序中分配的,屬於本地記憶體。臨時緩衝區的大小也是按資料塊大小分配的,預設是 1000,對於 8k 的資料塊大小為 8mb。

work_mem:

宣告內部排序操作和 hash 表在開始使用臨時磁碟檔案之前可使用的記憶體數目。這個記憶體也是本地記憶體,預設是 1mb。請注意對於複雜的查詢,可能會同時併發執行好幾個排序或雜湊(hash)操作;每個排序或雜湊操作都會分配這個引數宣告的記憶體來儲存中間資料,只有存不下才會使用臨時檔案。同樣,好幾個正在執行的會話可能會同時進行排序操作,因此使用的總記憶體量可能是 work_mem 的好幾倍。 order by、distinct 和 merge joins 都要用到排序操作。hash 表在以 hash join、hash 為基礎的聚集、以 hash 為基礎的 in 子查詢處理中都要用到。

maintenance_work_mem:

宣告在維護性操作(比如 cacuum、create index、alter table add foreign key等)中使用的最大記憶體數。預設是 16 mb。在乙個資料庫會話裡,只有乙個這樣的操作可以執行行,並且乙個資料庫例項通常不會有太多這樣的工作併發執行,把這個數值設定得比 work_mem 大一些通常是合適的。更大的設定可以提高上述操作的速度。

PostgreSQL 配置記憶體引數

對於任何資料庫軟體,記憶體配置項都是很重要的配置項。在 postgresql 主要有以下幾個記憶體配置引數。shared buffers integer 型別,設定資料庫伺服器將使用的共享記憶體緩衝區數量,此緩衝區為緩衝資料塊所用。此緩衝區是放在共享記憶體中的。每個緩衝區大小的典型值是 8k 位元組...

postgresql語句結構

postgresql語句結構 資料庫postgresql區分大小寫,在使用視覺化 軟體操作該資料庫時,一定注意大小寫,關鍵 字段,一定要使用雙引號。包括在開發軟體中 使用psql命令列登入資料庫需要一些引數,如psql h localhost u postgres 的postgres p 5432,...

PostgreSQL記憶體使用增長觀察

說是記憶體增長,其實未必是。但是客戶有時候喜歡用free命令來檢視,為何更好地了解,進行以下試驗。執行postgresql前 root server free m total used free shared buffers cached mem 1125 660464026 363 buffers...