PostgreSQL的內存參數

PostgreSQL的內存參數

基礎信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg軟件目錄:/home/pg16/soft
pg數據目錄:/home/pg16/data
端口:5777

PostgreSQL 提供了多種內存參數,可以通過調整這些參數來優化數據庫的性能。以下是一些主要的內存參數及其簡要說明:

主要內存參數概述

  1. shared_buffers
    • 描述:決定 PostgreSQL 用于緩存表和索引數據的內存大小。通常推薦設置為系統內存的 25%-50%。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep shared_buffers
shared_buffers = 128MB                  # min 128kB
  1. work_mem
    • 描述:用于操作(如排序、哈希聚合、聯接等)內存的大小。每個操作會單獨使用這些內存,可以調多但不能過大。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep work_mem
work_mem = 4MB                          # min 64kB
  1. maintenance_work_mem
    • 描述:用于維護操作(如 VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 等)的內存大小。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep maintenance_work_mem
maintenance_work_mem = 64MB             # min 1MB
  1. temp_buffers
    • 描述:用于每個數據庫會話的臨時表緩存內存大小。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep temp_buffers
temp_buffers = 8MB                      # min 800kB
  1. max_connections
    • 描述:允許的最大數據庫連接數。需要結合 shared_buffers 參數調節。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep max_connections
max_connections = 50                    # (change requires restart)
  1. effective_cache_size
    • 描述:設置 PostgreSQL 認為操作系統內核文件系統緩存及 PostgreSQL 緩存的大小。推薦設置為系統內存的 50%-75%。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep effective_cache_size
effective_cache_size = 1GB
  1. wal_buffers
    • 描述:用于存儲寫入 WAL (Write-Ahead Log) 的緩沖區大小。通常設置為 shared_buffers 的 3%-4%。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep wal_buffers
wal_buffers = 8MB                       # min 32kB, -1 sets based on shared_buffers
  1. checkpoint_completion_target
    • 描述:設置 checkpoint 完成平均占用時間的比例(0到1之間)。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep checkpoint_completion_target
checkpoint_completion_target = 0.9      # checkpoint target duration, 0.0 - 1.0
  1. autovacuum_work_mem
    • 描述:用于自動化 VACUUM 操作的內存大小。
    • 示例
[pg16@test ~]$ cat data/postgresql.conf |grep autovacuum_work_mem
autovacuum_work_mem =64MB

內存參數配置示例

以下是一個示例 postgresql.conf 中內存參數配置:

# 內存配置示例shared_buffers = 2GB                        # 共享內存緩沖區,設置為系統內存的 25%-50%
work_mem = 64MB                             # 每個操作的工作內存,適當調整以優化查詢性能
maintenance_work_mem = 512MB                # 維護任務的工作內存
temp_buffers = 64MB                         # 臨時表緩存內存
max_connections = 200                       # 最大連接數,根據并發需求設置
effective_cache_size = 6GB                  # 預期總緩存大小,包括操作系統的文件系統緩存
wal_buffers = 16MB                          # WAL 緩沖區
checkpoint_completion_target = 0.7          # checkpoint 完成時間比例
autovacuum_work_mem = 64MB                  # 自動 `VACUUM` 操作的內存大小

其他相關參數

除了主要內存參數,還有一些其他參數可能間接影響內存使用:

  • sort_mem / work_mem: 不同版本的配置名稱不同,但作用相似。
  • maintenance_work_mem: 影響 CREATE INDEX, VACUUM, REINDEX 等操作的性能。
  • hash_mem_multiplier: 影響哈希連接的內存分配。
  • max_worker_processes: 影響并行查詢的最大工作進程數。
  • parallel_min_parallel_table_scan_size: 影響并行查詢的觸發條件。

調整和優化建議

  1. 監控內存使用情況
    使用系統工具(如 top, htop, free -m)和 PostgreSQL 內置視圖(如 pg_stat_activity)監控內存使用情況。

  2. 逐步調整參數
    從小到大逐步調整內存參數,觀察系統性能變化,避免一次性調整過大導致系統不穩定。

  3. 平衡系統資源
    結合數據庫和操作系統的內存需求,合理分配系統內存資源。確保操作系統有足夠的內存用于文件系統緩存和其他重要任務。

  4. 考慮實際工作負載
    根據實際工作負載特點調整內存參數。例如,查詢密集的環境下可以增大 work_mem,而批處理任務較多的環境下則更關注 maintenance_work_mem 等參數。

小結

調整和優化 PostgreSQL 的內存參數可以顯著提升數據庫的性能和效率。每個參數的具體值應根據系統資源、實際工作負載和性能需求進行合理配置和優化。通過逐步調整和監控,你可以找到最適合你的系統的配置參數組合。

謹記:心存敬畏,行有所止。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20949.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20949.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20949.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個高效的go語言字符串轉駝峰命名算法實現函數

在go語言的開發中我們經常需要對各種命名進行規范&#xff0c; 今天給大家介紹的是一個高效的將字符串轉 駝峰命名 &#xff08;即 首字母大寫的命名方式&#xff09;的函數。 // 字符串轉駝峰命名 // author tekintian <tekintiangmail.com> func CamelStr(str string) …

【python學習】Anaconda的介紹、下載及conda和pip換源方式(切換到國內鏡像源)

什么是Anaconda Anaconda 是一個專為數據科學和機器學習預裝了多種庫的Python發行版。 提供了包管理與環境管理的功能解決了多個版本python并存的問題解決了第三方包安裝問題 如何下載Anaconda 官網地址&#xff1a;https://www.anaconda.com/ 點擊右上角的 Free Download …

PostgreSQL 和Oracle鎖機制對比

PostgreSQL 和Oracle鎖機制對比 PostgreSQL 和 Oracle 都是業界廣泛使用的關系型數據庫管理系統&#xff0c;它們在鎖機制方面都有獨到的設計來控制并發訪問&#xff0c;確保數據的一致性和完整性。下面我們詳細比較一下這兩個數據庫系統的鎖機制。 1. 鎖類型 PostgreSQL P…

C語言王國——選擇與循環(1)

目錄 一、引言 二、選擇結構 1&#xff0c;if語句 1.1&#xff0c;if...else...語句 1.2&#xff0c;多分支語句 1.3懸空else的問題 2&#xff0c;switch語句 2.1&#xff0c;switch 2.2&#xff0c;break 2.3&#xff0c;default 一、引言 寫了幾個C語言代碼我發現C語…

ReduceTask工作機制

&#xff08;1&#xff09;Copy階段 ReduceTask從各個MapTask上遠程拷貝一片數據&#xff0c;并針對某一片數據&#xff0c;如果其大小超過一定閾值&#xff0c; 則寫到磁盤上 &#xff0c;否則直接放到內存中。 &#xff08;2&#xff09;Merge階段 在遠程拷貝數據的同時 &a…

go模擬經典面試題

講下MySQL事務 &#xff08;1&#xff09;事務的概念 事務就是對數據庫執行一系列操作&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部失敗&#xff0c;不會存在部分成功的情況。 &#xff08;2&#xff09;事務的ACID特點 原子性&#xff1a;一個事務中的所有操…

def用法 Python:深度解析函數定義與調用的奧秘

def用法 Python&#xff1a;深度解析函數定義與調用的奧秘 在Python的編程世界中&#xff0c;def 關鍵字如同一座神秘的燈塔&#xff0c;照亮了我們探索函數定義與調用的道路。它不僅是創建函數的起點&#xff0c;更是構建高效、可維護代碼的關鍵所在。本文將通過四個方面、五…

華為坤靈交換機S300, S500, S210,S220, S200, S310 如何WEB抓包

通過S系列交換機配置端口鏡像實現抓包 1、應用場景 端口鏡像是指將經過指定端口(源端口或者鏡像端口)的報文復制一份到另一個指定端口(目的端口或者觀察端口)。在網絡運營與維護的過程中&#xff0c;為了便于業務監測和故障定位&#xff0c;網絡管理員時常要獲取設備上的業務報…

FFmpeg中視頻 Filters 使用文檔介紹

FFmpeg中Filters 簡介 FFmpeg是一個強大的多媒體框架,它支持多種音視頻編解碼器、容器格式、協議等。其中,FFmpeg的Filters(過濾器)是FFmpeg中一個非常強大的功能,它允許用戶對音視頻數據進行各種處理,包括但不限于視頻濾鏡、音頻效果、視頻轉換等。 到目前為止,FFmpeg…

Lua使用方式介紹

背景 Lua是C語言開發的腳本語言&#xff0c;設計的目的是為了嵌入到程序中&#xff0c;因此被設計得輕量小巧。Nginx配置中可以直接嵌入Lua 代碼或引入Lua 文件&#xff0c;Redis支持運行Lua語句和腳本&#xff0c;Wireshark中使用Lua腳本自定義協議。 本文用于收集常用的語法…

JMeter源碼解析之SplashScreen.java

JMeter源碼解析之SplashScreen.java完結 SplashScreen.java主要作用 JMeter GUI啟動加載界面。 文件路徑 路徑地址&#xff1a;…\apache-jmeter-5.1\src\core\org\apache\jmeter\SplashScreen.java 關于SplashScreen內容中的代碼解析 package org.apache.jmeter;import …

隊列——一種操作受限的線性表

隊列 隊列&#xff08;Queue&#xff09;簡稱隊&#xff0c;也是一種操作受限的線性表&#xff0c;只允許在表的一端進行插入&#xff0c;而在表的另一端進行刪除。向隊列中插入元素稱為入隊或進隊&#xff0c;刪除元素稱為出隊或離隊。隊列中的元素是先進先出&#xff08;Fir…

大聰明教你學Java | 深入淺出聊 Stream.parallel()

前言 &#x1f34a;作者簡介&#xff1a; 不肯過江東丶&#xff0c;一個來自二線城市的程序員&#xff0c;致力于用“猥瑣”辦法解決繁瑣問題&#xff0c;讓復雜的問題變得通俗易懂。 &#x1f34a;支持作者&#xff1a; 點贊&#x1f44d;、關注&#x1f496;、留言&#x1f4…

MySQL學習——選項文件的使用

MySQL 的許多程序都可以從選項文件&#xff08;有時也被稱為配置文件&#xff09;中讀取啟動選項。選項文件提供了一種方便的方式來指定常用的選項&#xff0c;這樣你就不必每次運行程序時都在命令行上輸入這些選項。 要確定一個程序是否讀取選項文件&#xff0c;你可以使用 -…

man命令的作用

man命令是Linux操作系統中一個非常實用的命令&#xff0c;它用于查看命令的手冊頁面&#xff0c;幫助用戶了解特定命令的用法、選項和參數。這不僅對新用戶在學習如何使用新命令時很有幫助&#xff0c;也方便了經驗豐富的用戶快速查找命令的詳細信息。以下是具體介紹&#xff1…

[論文精讀]Supervised Community Detection with Line Graph Neural Networks

論文網址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是純手打的!論文原文的summarizing and paraphrasing。可能會出現難以避免的拼寫錯誤和語法錯誤,若有發現歡迎評論指正!文章偏向于筆記,謹慎食用 ?內涵大量可視…

高速模擬信號鏈的設計學習

目錄 概述&#xff1a; 定義&#xff1a; 斷開&#xff1a; 鏈路設計&#xff1a; 結論&#xff1a; 概述&#xff1a; 由于對共模參數及其與設備之間的關聯缺乏了解&#xff0c;客戶仍然會提出許多技術支持問題。ADC數據表指定了模擬輸入的共模電壓要求。關于這方面沒有太…

jenkins應用2

1.jenkins應用 1.jenkins構建的流程 1.使用git參數化構建&#xff0c;用標簽區分版本 2.git 拉取gitlab遠程倉庫代碼 3.maven打包項目 4.sonarqube經行代碼質量檢測 5.自定義制作鏡像發送到遠程倉庫harbor 6.在遠程服務器上拉取代碼啟動容器 這個是構建的整個過程和步驟…

C# 反射類Assembly 程序集(Assembly)用法

常見的兩種程序集&#xff1a; 可執行文件&#xff08;.exe文件&#xff09;和 類庫文件&#xff08;.dll文件&#xff09;。 在VS開發環境中&#xff0c;一個解決方案可以包含多個項目&#xff0c;而每個項目就是一個程序集。 他們之間是一種從屬關系&#xff0c;也就是說&…

java —— 匿名內部類與 Lambda 表達式

一、匿名內部類 匿名內部類是一種沒有名稱的類&#xff0c;多用于只使用一次的情況&#xff0c;本質上就是其所繼承的父類或接口的一個子類。 &#xff08;一&#xff09;繼承普通類的情況 public class Test{public void method(){System.out.println("通用方法"…