尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PostgreSQL 15 shared_buffers参数优化指南
1. PostgreSQL 15中的shared_buffers参数解析shared_buffers是PostgreSQL中最重要的内存配置参数之一它定义了数据库服务器用于缓存数据的内存区域大小。这个参数直接影响到数据库的查询性能和整体吞吐量。在PostgreSQL 15中这个参数的配置方式与之前版本保持一致但优化器对内存使用的效率有所提升。shared_buffers本质上是一个共享内存区域所有后端进程都可以访问它。当PostgreSQL需要读取数据时它首先会检查shared_buffers中是否已经缓存了所需的数据块。如果找到缓存命中就可以避免昂贵的磁盘I/O操作如果没有找到缓存未命中则必须从磁盘读取数据。重要提示shared_buffers的默认值通常设置得比较保守比如128MB在生产环境中几乎总是需要调整这个值以获得更好的性能。2. shared_buffers的合理配置建议2.1 基于系统内存的比例配置经验法则建议将shared_buffers设置为系统总内存的25%左右。例如对于16GB内存的服务器4GB (4096MB)对于32GB内存的服务器8GB (8192MB)对于64GB内存的服务器16GB (16384MB)然而这个比例并不是绝对的。当系统内存非常大时比如超过64GB可能需要调整这个比例# 在postgresql.conf中的配置示例 shared_buffers 8GB # 对于32GB内存的系统2.2 考虑工作负载特性不同的工作负载对shared_buffers的需求也不同OLTP工作负载这类系统通常有大量随机读写较大的shared_buffers可以显著提高性能。可以考虑设置为系统内存的30-40%。数据仓库/分析系统这类系统通常执行大表扫描操作系统缓存可能更有效。shared_buffers可以设置为系统内存的15-25%。混合工作负载需要根据具体情况进行测试和调整通常从25%开始然后根据性能测试结果进行优化。3. shared_buffers与其他内存参数的关系配置shared_buffers时必须考虑PostgreSQL的其他内存相关参数以避免内存过度分配3.1 work_mem和maintenance_work_memwork_mem用于排序和哈希操作的内存maintenance_work_mem用于维护操作如VACUUM、CREATE INDEX的内存这些是每个连接可以使用的内存与shared_buffers不同它们是会话级别的而非共享的。3.2 effective_cache_size这个参数告诉查询规划器操作系统和PostgreSQL可用的磁盘缓存总量。它不影响实际内存分配但会影响查询计划的选择。通常设置为系统总内存的50-75%。effective_cache_size 24GB # 对于32GB内存的系统3.3 操作系统缓存PostgreSQL也依赖操作系统的磁盘缓存。shared_buffers和操作系统缓存共同构成了数据库的缓存体系。过大的shared_buffers可能会挤占操作系统缓存反而降低性能。4. 在PostgreSQL 15中调整shared_buffers的步骤4.1 定位postgresql.conf文件在PostgreSQL 15中配置文件通常位于Linux:/etc/postgresql/15/main/postgresql.conf或/var/lib/pgsql/15/data/postgresql.confWindows:C:\Program Files\PostgreSQL\15\data\postgresql.conf可以使用以下SQL命令查找配置文件位置SHOW config_file;4.2 修改shared_buffers参数使用文本编辑器打开postgresql.conf文件搜索shared_buffers取消注释并修改该行如果被注释保存文件示例修改# 修改前 # shared_buffers 128MB # 修改后 shared_buffers 4GB4.3 应用配置更改修改配置后需要重新加载PostgreSQL服务使更改生效# 系统d方式大多数Linux发行版 sudo systemctl reload postgresql15-main # 或者使用pg_ctl pg_ctl reload -D /var/lib/pgsql/15/data注意shared_buffers参数需要重启PostgreSQL服务才能生效而不仅仅是重新加载。使用reload只会使其他不需要重启的参数生效。5. 验证和监控shared_buffers的效果5.1 检查当前shared_buffers值SHOW shared_buffers;5.2 监控缓存命中率缓存命中率是评估shared_buffers配置是否合理的重要指标SELECT sum(blks_hit) / (sum(blks_hit) sum(blks_read)) * 100 AS cache_hit_ratio FROM pg_stat_database;理想情况下缓存命中率应该高于99%。如果低于95%可能需要增加shared_buffers的大小。5.3 使用pg_buffercache扩展pg_buffercache扩展可以提供shared_buffers中缓存内容的详细信息CREATE EXTENSION pg_buffercache; -- 查看缓存使用情况 SELECT c.relname, count(*) AS buffers FROM pg_buffercache b JOIN pg_class c ON b.relfilenode pg_relation_filenode(c.oid) GROUP BY c.relname ORDER BY count(*) DESC LIMIT 10;6. shared_buffers配置的常见问题与解决方案6.1 配置过大导致系统不稳定如果shared_buffers设置过大可能会导致操作系统内存不足触发OOM killer其他进程包括PostgreSQL的辅助进程无法获得足够内存系统开始使用交换空间性能急剧下降解决方案逐步增加shared_buffers每次增加后监控系统整体内存使用情况。6.2 Linux系统的共享内存限制在Linux系统上可能需要调整内核参数以支持较大的shared_buffers# 查看当前共享内存限制 sysctl kernel.shmmax sysctl kernel.shmall # 临时设置重启后失效 sudo sysctl -w kernel.shmmax17179869184 # 16GB sudo sysctl -w kernel.shmall4194304 # 永久设置添加到/etc/sysctl.conf kernel.shmmax 17179869184 kernel.shmall 41943046.3 Windows上的特殊考虑在Windows系统上PostgreSQL使用不同的内存架构shared_buffers的有效最大值通常较小约512MB-1GB。如果需要更大的共享内存建议考虑使用Linux服务器。7. PostgreSQL 15中shared_buffers的优化改进PostgreSQL 15在内存管理方面做了一些优化虽然shared_buffers的基本机制没有改变但以下改进值得注意更高效的缓冲区替换策略改进了时钟扫描算法减少了缓冲区管理的开销。预取优化对于顺序扫描优化器能更好地预测并预取数据到shared_buffers。并行查询改进并行查询工作进程能更有效地共享缓冲区内容。WAL写入优化减少了检查点期间的I/O冲击间接提高了shared_buffers的利用率。这些改进意味着在PostgreSQL 15中相同的shared_buffers配置可能会比早期版本提供更好的性能。
RELATED

相关推荐

Oracle APEX 4.2.5 开发实战:环境搭建与表单动态交互

Oracle APEX 4.2.5 开发实战:环境搭建与表单动态交互

简介:《Oracle APEX深入浅出》是一份面向Oracle APEX初学者与中级开发者的技术文档,侧重解决从环境搭建到企业级应用开发中的知识断层问题。资源为单个doc文档,压缩包约8.11MB,内容以开发指南形式组织,适合作为系统学习…

📅 2026/10/31 18:04:10
无人机占道检测:Mask R-CNN实例分割实战优化

无人机占道检测:Mask R-CNN实例分割实战优化

1. 项目概述:无人机占道经营检测的实例分割方案去年夏天参与城市管理项目时,我第一次亲眼目睹了无人机拍摄的占道经营乱象——摊贩的遮阳伞像蘑菇一样从人行道"生长"到机动车道,传统的矩形框检测根本无法精确勾勒这些不规则物体。这…

📅 2026/10/31 17:59:10
32位Win7安装SQL Server 2012图解教程:三个安装包与系统配置检查

32位Win7安装SQL Server 2012图解教程:三个安装包与系统配置检查

简介:这份PDF图解教程面向初次接触微软数据库的开发者与运维人员,围绕SQL Server 2012在Windows 7 SP1 32位环境下的完整安装流程展开,帮助读者解决从下载安装包、检查软硬件环境到完成实例配置各环节的实际问题。资源包共1个文件&#xff0c…

📅 2026/10/31 17:59:10
MORE NEWS

更多资讯

📰

C语言DOS游戏开发实战:Turbo C图形编程与现代移植

简介:本资源是一套面向C语言初学者与课程设计学生的综合性实践项目合集,涵盖28个完整可运行的小游戏源码,适用于《高级程序语言设计》课程期末大作业、编程实训或兴趣拓展。包内共320个文件,以C/C源文件(.c/.cpp/.h&am…

📰

运维自救:Linux一键修复与安装脚本全解析

简介:这是一套面向运维人员、系统管理员和 Linux 初学者的一键修复与安装脚本,专门解决各类 Linux 系统故障修复和服务器环境搭建问题。脚本支持 Ubuntu、CentOS、Debian 等主流发行版,通过一条命令即可自动完成系统环境检测、软件包管理器修…

📰

Hyperframes高密度帧处理:分块流水线与顺序保证实战

1. 从“hyperframes”这个词说起:它到底是什么第一次看到“hyperframes”这个词,我脑子里蹦出来的第一反应是——这大概率跟“帧”有关,而且“hyper”这个前缀暗示了某种“超”或者“高密度”的含义。在图形渲染、视频处理、动画制作、甚至前…

📰

接盘十二年遗留系统:尽调、止血与渐进式改造

接手一个十几年没大动过的老系统,圈子里管这叫“接盘”,前面还得加两个字:慎重。最近刷到一条讨论挺有代表性:某款上线十二年、代码结构已经乱成一团的产品,年营收还在一个亿以上的量级,原团队要撤&#xf…

📰

年入过亿的遗留系统如何接手?技术债治理与渐进改造实战

我见过太多团队在接手老系统时栽跟头,也见过一些代码烂到让人头皮发麻、但商业上活得相当滋润的产品。最近圈子里又在传那个“年收入 1.4 亿、代码堆了 12 年”的老故事,评论区一水儿的“快跑”“别接盘”。说句实在话,这种反应很正常&#x…

📰

MySQL备份与恢复全攻略:从基础到企业级实践

1. MySQL备份与恢复概述作为数据库管理员,数据安全永远是首要任务。MySQL作为最流行的开源关系型数据库,提供了多种备份恢复方案,从简单的逻辑备份到高性能的物理备份,满足不同业务场景需求。本文将全面介绍MySQL备份恢复的核心技…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬