【PostgreSQL系列】PostgreSQL性能优化

article/2025/6/9 3:18:05

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • kwan 的解忧杂货铺:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一、WAL(预写式日志)相关参数优化
      • 1. wal_buffers 参数
      • 2. max_wal_size 参数
    • 二、检查点相关参数优化
      • 1. checkpoint_timeout 参数
      • 2. checkpoint_completion_target 参数
    • 三、I/O 性能相关参数优化
      • 1. random_page_cost 参数
      • 2. effective_io_concurrency 参数
    • 四、内存相关参数优化
      • 1. maintenance_work_mem 参数
      • 2. work_mem 参数
    • 五、参数调整后的配置重载
    • 六、参数调优的综合策略
      • 1. 循序渐进原则
      • 2. 监控与评估
      • 3. 工作负载特性考虑
    • 七、常见问题与解决方案
      • 1. 检查点引起的性能波动
      • 2. 内存不足问题
      • 3. WAL 相关瓶颈

PostgreSQL 作为一款功能强大的开源关系型数据库,其默认配置通常是为了适应广泛的通用场景而设计的。然而,在生产环境中,针对特定工作负载进行适当的参数调优可以显著提升数据库性能。
在这里插入图片描述

一、WAL(预写式日志)相关参数优化

1. wal_buffers 参数

wal_buffers参数控制 WAL(Write-Ahead Logging)缓冲区的大小,默认值为 4MB。WAL 缓冲区用于存储尚未写入磁盘的 WAL 数据,增大此值可以减少磁盘 I/O 操作。

ALTER SYSTEM SET wal_buffers = '16MB';

优化建议

  • 对于写入密集型工作负载,建议设置为 shared_buffers 的 1/32 到 1/64
  • 最大不超过 WAL 段文件大小(通常为 16MB)
  • 过大的 wal_buffers 会占用过多内存,但不会带来额外性能提升

2. max_wal_size 参数

max_wal_size参数控制 WAL 文件的最大总大小,默认值为 1GB。

ALTER SYSTEM SET max_wal_size = '4GB';

优化建议

  • 对于高写入负载的系统,增大此值可以减少检查点频率
  • 通常设置为 checkpoint_timeout 期间预计产生的 WAL 量的 2-4 倍
  • 需要确保有足够的磁盘空间存放 WAL 文件

二、检查点相关参数优化

1. checkpoint_timeout 参数

checkpoint_timeout参数设置自动检查点之间的最长时间间隔,默认值为 5 分钟。

ALTER SYSTEM SET checkpoint_timeout = '30min';

优化建议

  • 增大此值可以减少检查点频率,降低 I/O 负载
  • 但过长的间隔会导致崩溃恢复时间变长
  • 通常设置在 15-30 分钟之间较为合适

2. checkpoint_completion_target 参数

checkpoint_completion_target参数控制在检查点间隔内完成检查点的目标比例,默认值为 0.5。

ALTER SYSTEM SET checkpoint_completion_target = 0.9;

优化建议

  • 设置为 0.9 意味着检查点将在 90%的时间间隔内完成
  • 较高的值可以使检查点 I/O 更均匀地分布
  • 有助于避免 I/O 突发对系统性能的影响

三、I/O 性能相关参数优化

1. random_page_cost 参数

random_page_cost参数设置规划器对非顺序获取磁盘页面的成本估计,默认值为 4.0。

ALTER SYSTEM SET random_page_cost = 4.0;

优化建议

  • 对于 SSD 存储,可以设置为 1.0-2.0
  • 对于高端存储阵列,可以设置为 2.0-3.0
  • 较低的 random_page_cost 会使查询规划器更倾向于使用索引扫描

2. effective_io_concurrency 参数

effective_io_concurrency参数设置 PostgreSQL 预期的并发 I/O 操作数量,默认值为 1。

ALTER SYSTEM SET effective_io_concurrency = 3;

优化建议

  • 对于 SSD 或 RAID 阵列,可以设置为 2-4
  • 此参数影响预读行为和维护工作
  • 过高的值会导致不必要的 I/O 预取

四、内存相关参数优化

1. maintenance_work_mem 参数

maintenance_work_mem参数设置维护操作(如 VACUUM、CREATE INDEX 等)使用的最大内存量,默认值为 64MB。

ALTER SYSTEM SET maintenance_work_mem = '256MB';

优化建议

  • 对于大型数据库,可以设置为 256MB-1GB
  • 较大的值可以加速维护操作
  • 但需要确保系统有足够的可用内存

2. work_mem 参数

work_mem参数设置每个查询操作(如排序或哈希表)可以使用的内存量,默认值为 4MB。

ALTER SYSTEM SET work_mem = '16MB';

优化建议

  • 对于复杂查询较多的系统,可以适当增大
  • 但过大的值可能导致内存使用失控
  • 可以考虑在会话级别为特定查询设置更高的值

五、参数调整后的配置重载

修改这些参数后,通常不需要重启 PostgreSQL 服务,只需执行以下命令即可重新加载配置:

SELECT pg_reload_conf();

注意事项

  • 某些参数更改需要完全重启 PostgreSQL 服务才能生效
  • 在生产环境中应用更改前,应在测试环境中验证
  • 可以使用SHOW命令验证参数是否已正确应用

六、参数调优的综合策略

1. 循序渐进原则

参数调优应该采取渐进的方式,每次只调整一个或少数几个参数,观察系统行为变化后再决定下一步调整。

2. 监控与评估

使用 PostgreSQL 的内置统计视图(如 pg_stat_activity、pg_stat_bgwriter)和扩展(如 pg_stat_statements)来监控参数调整的效果。

3. 工作负载特性考虑

不同的应用场景需要不同的优化策略:

  • OLTP 系统:关注短事务性能和高并发
  • 数据仓库:关注大查询和复杂分析性能
  • 混合负载:需要平衡各种需求

七、常见问题与解决方案

1. 检查点引起的性能波动

症状:系统周期性变慢,I/O 等待时间周期性增加。
解决方案:调整 checkpoint_timeout 和 checkpoint_completion_target,使检查点 I/O 更均匀分布。

2. 内存不足问题

症状:频繁的磁盘交换,响应时间不稳定。
解决方案:合理设置 work_mem 和 maintenance_work_mem,确保不超过系统可用内存。

3. WAL 相关瓶颈

症状:高写入负载下性能下降明显。
解决方案:优化 wal_buffers 和 max_wal_size,考虑使用更快的存储设备存放 WAL。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.hkcw.cn/article/feoGgNyVfb.shtml

相关文章

如何使用 TortoiseGit 将本地代码回退到指定版本

如何使用 TortoiseGit 将本地代码回退到指定版本 在使用 Git 进行版本控制时,我们可能会遇到需要回退到某个旧版本的情况,比如发现最近的修改引入了问题,或者需要恢复到某个特定的稳定状态。TortoiseGit 是一款非常流行的 Git 图形化工具&am…

航空安全警钟须长鸣 充电宝冒烟再敲警钟

5月31日,CZ6850杭州飞往深圳的航班上,一名旅客携带的相机电池和充电宝突然冒烟。乘务组迅速采取措施,排除了安全风险。为确保安全,机组决定立即返航,航班在起飞15分钟后安全降落。这次事件虽然没有造成人员伤亡,但再次提醒人们航空安全的重要性。任何微小的安全隐患都可能…

玩客云 OEC/OECT 笔记

外观 内部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的网络盒子, 没有HDMI输入输出. 硬件上 OEC 和 OECT 是一样的, 唯一的区别是内存, OEC 内存 2GB 而OECT 内存是 4GB. 产品OECOEC-turboCPURK3566…

InfluxDB 高级函数详解:DERIVATIVE、INTEGRAL、SPREAD、HISTOGRAM 与 DIFFERENCE

在时序数据分析中,除了基础的聚合函数(如 MEAN、SUM),InfluxDB 还提供了一系列专门针对时间序列特性的高级函数。这些函数能帮助我们挖掘数据的变化趋势、波动特征和分布规律。下面我们将逐一解析五个关键函数:DERIVAT…

华为OD机试真题—— 最少数量线段覆盖/多线段数据压缩(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最少数量线段覆盖/多线段数…

古代小孩哥怎么过六一 绿意中撒欢踢毽子

今天是六一儿童节,让我们一起看看古代的孩子们在这一天会玩些什么。古代的童趣VCR展示了高能量小孩哥的日常。他们在绿意盎然的环境中尽情撒欢,青翠的柳荫、碧绿的草地,还有亲密的玩伴。孩子们选择组团踢毽子,只见小孩哥眼神专注,动作轻快,毽子跃起时衣角也随之飘动。旁边…

有捏捏玩具甲醛超标40多倍 安全问题引热议

近日,拥有百万粉丝的捏捏玩具博主“有只猫叫小朋友”在社交平台上发布癌症诊断书,并表示暂停更新。这一举动引发了关于捏捏玩具安全性的讨论。有网友留言称,自己和孩子玩过捏捏玩具后出现了头疼、嗓子疼的情况。捏捏玩具是一种流行的硅胶材质慢回弹类解压玩具,外形多为软萌…

宇树机器狗go2添加3d雷达(下)添加velodyne系列雷达

0.前言 上一篇文章教大家如何在宇树机器狗go2的仿真环境中添加3d雷达livox mid360(宇树机器狗go2 添加3d雷达(上)添加livox系列雷达),本期文章会教大家添加lvelodyne的系列雷达,是添加3d雷达的下期。宇树机…

美国终止艾滋病疫苗研发项目 转向现有方法消除艾滋病

特朗普政府终止了一项2.58亿美元的项目,对艾滋病疫苗研发工作造成了沉重打击。一位不愿透露姓名且未经授权发言的高级官员表示,美国国立卫生研究院计划将关注点转向利用现有方法消除艾滋病,并暂停了莫德纳公司研发的一项艾滋病疫苗临床试验。公共卫生专家指出,这些削减措施…

需求分析文档(PRD)编写指南——结构化定义与标准化写作方法

序言 在产品研发过程中,需求分析文档(PRD)是连接业务目标与技术实现的核心纽带。一份清晰的PRD能够: 统一团队认知:让产品、开发、测试等角色对需求的理解保持一致; 减少沟通成本:通过结构化描…

使用Shell脚本实现多GPU上的Ollama模型自动部署

使用Shell脚本实现多GPU上的Ollama模型自动部署 在大规模AI应用场景中,我们经常需要在多个GPU上同时部署不同的语言模型。本文将介绍一个自动化部署脚本,用于在多个GPU上高效部署和管理Ollama模型。 功能特点 自动停止已运行的Ollama服务支持多GPU并行…

Apdex评分从3级到5级标准划分思路详解

什么是 Apdex APdex (Application Performance Index)‌是一个用于评估应用性能的工业标准,也被称为 满意度,广泛应用于性能监控和优化。由 Apdex联盟开发,它从用户的角度出发,将应用响应时间的表现,转化为…

MATLAB 绘制带误差棒的拟合图:从入门到精通

在科学研究和工程实践中,数据可视化是理解数据特性、验证模型假设的重要手段。今天,我们来深入探讨一种极具价值的数据可视化形式——带误差棒的拟合图,并手把手教你如何用 MATLAB 实现它。 一、什么是带误差棒的拟合图 带误差棒的拟合图是…

[面试精选] 0206. 反转链表

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 206. 反转链表 - 力扣(LeetCode) 2. 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 3. 题目示例 示例 1 :…

“香会”现场,中方代表发声!

第22届香格里拉对话会正在新加坡举行中国人民解放军国防大学代表团成员张弛在现场回应一系列焦点问题解放军打“独”促统不停步!在今年的香格里拉对话会上,台湾问题多次被提及。对此,张弛表示,“台独”分裂与台海和平是水火不容的,赖清德当局一年多来大肆挑动两岸的对立对…

乌总统顾问:备忘录未来实施恐困难重重

俄罗斯方面5月30日称,俄代表团已经准备好在6月2日与乌克兰开启第二轮谈判,希望双方能就和平协议备忘录内容进行讨论。乌克兰官员5月31日表示,由于俄罗斯未公开备忘录内容,乌方猜测大概率与俄方官员此前声明并无差异,未来实施备忘录内容可能困难重重。乌克兰总统办公室主任…

夺冠、庆祝、然后被捕……昨夜巴黎街头如“战场”

5月31日,法甲球队巴黎圣日耳曼5比0大胜意甲球队国际米兰,捧起本赛季欧冠联赛冠军奖杯。彻夜狂欢的法国球迷聚集在巴黎香榭丽舍大街及“大巴黎”主场王子公园一带。据巴黎警方消息,至午夜已有至少81人因滋事被捕。户外烟花声、鸣笛声、欢呼声不绝于耳,间或传来警笛声。据法媒…

基于联咏平台NT985XX 编码配置及常见问题解析

一、概述 hd_videoenc 的主要目的是从上层单元获取图像原始数据,并控制视频编码器对该图像进行编码,输出码流后可用于保存档案或进行在线串流。 二、HDAL interface介绍 这部分可以直接参考 video_record.c 这支 sample code, 开启与关闭…

【PCI】PCI入门介绍(包含部分PCIe讲解)

先解释一下寻址空间: 机器是32bit的话,意味着4G(2的32次方)寻址空间,内存条作为它的实际物理存储设备。大部分在跑内存程序运行,少部分用来存放其他东西。这是一个常见的4G寻址空间分布(不一定是…

中方批美印太战略:除了挑事端搞乱亚太毫无建树

中方批美“印太战略”:除了挑事端 搞乱亚太 毫无建树5月31日,在新加坡出席香格里拉对话会的中国国防大学教授孟祥青在接受总台记者采访时表示,美国在对话会中制造地区分裂,但是东盟国家更关注合作和发展,这才是地区国家的共同心声。var chan_v_w = 960,chan_v_h = 540,cha…