【PostgreSQL系列】PostgreSQL性能优化

[复制链接]
发表于 2025-9-12 08:52:10 | 显示全部楼层 |阅读模式
💝💝💝欢迎来到我的博客,很高兴可以或许在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不但可以得到有趣的内容和知识,也可以各抒己见、分享您的想法和见解。

  

  • 保举:kwan 的首页,持续学习,不绝总结,共同进步,活到老学到老
  • 导航

    • kwan 的解忧杂货铺:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务
    • 常用开辟工具系列:常用的开辟工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 题目等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的下令,解放双手不香吗?能用一个下令完成绝不消两个操纵
    • 数据结构与算法系列:总结数据结构和算法,差别范例针对性训练,提升编程思维,剑指大厂

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

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

一、WAL(预写式日记)相干参数优化

1. wal_buffers 参数

wal_buffers参数控制 WAL(Write-Ahead Logging)缓冲区的大小,默认值为 4MB。WAL 缓冲区用于存储尚未写入磁盘的 WAL 数据,增大此值可以减少磁盘 I/O 操纵。
  1. 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。
  1. ALTER SYSTEM SET max_wal_size = '4GB';
复制代码
优化发起


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

1. checkpoint_timeout 参数

checkpoint_timeout参数设置主动检查点之间的最长时间间隔,默认值为 5 分钟。
  1. ALTER SYSTEM SET checkpoint_timeout = '30min';
复制代码
优化发起


  • 增大此值可以减少检查点频率,低落 I/O 负载
  • 但过长的间隔会导致瓦解规复时间变长
  • 通常设置在 15-30 分钟之间较为合适
2. checkpoint_completion_target 参数

checkpoint_completion_target参数控制在检查点间隔内完成检查点的目的比例,默认值为 0.5。
  1. 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。
  1. 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。
  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。
  1. ALTER SYSTEM SET maintenance_work_mem = '256MB';
复制代码
优化发起


  • 对于大型数据库,可以设置为 256MB-1GB
  • 较大的值可以加快维护操纵
  • 但必要确保系统有足够的可用内存
2. work_mem 参数

work_mem参数设置每个查询操纵(如排序或哈希表)可以使用的内存量,默认值为 4MB。
  1. ALTER SYSTEM SET work_mem = '16MB';
复制代码
优化发起


  • 对于复杂查询较多的系统,可以适当增大
  • 但过大的值可能导致内存使用失控
  • 可以思量在会话级别为特定查询设置更高的值
五、参数调解后的配置重载

修改这些参数后,通常不必要重启 PostgreSQL 服务,只需执行以下下令即可重新加载配置
  1. 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表