【赵渝强老师】PostgreSQL的内存结构

简介: PostgreSQL内存结构分为本地内存与共享内存。本地内存包括work_mem、maintenance_work_mem和temp_buffers,供各会话独立使用;共享内存如shared_buffers、wal_buffers和effective_cache_size,则由所有进程共用,用于缓存数据、WAL日志及优化查询性能。

b401.png

PostgreSQL的内存结构分为两种不同的类型,它们分别是本地内存和共享内存。它们的关系如下图所示:

image.png

视频讲解如下:


一、 本地内存

PostgreSQL的本地内存是指每个后台进程(backend process)自己使用的内存区域,下面列举了PostgreSQL中的本地内存以及它们的作用。


  • work_mem

使用work_mem区域用于对数据的排序,比如order by、distinct操作,也用于表的join操作,比如merge-join、hash-join操作。该区域的大小由参数work_mem控制,默认值是4MB。


  • maintenance_work_mem

该内存区域用于一些维护操作,比如vacuum、reindex、alter table add foreign key等操作。它由参数maintenance_work_mem控制大小,默认值是64MB。由于数据库会话一次只能执行其中的一个操作,并且PostgreSQL不会同时运行许多操作,因此可以将maintenance_work_mem的值设置为明显大于work_mem的值。


  • temp_buffers

该区域存放临时表的数据,由temp_buffer参数控制,默认值是8MB。该参数设置每个数据库会话使用的临时缓冲区的最大数量。PostgreSQL允许在单个会话中更改此参数的设置,但只能在会话中首次使用临时表之前进行更改。PostgreSQL利用这个内存区域来保存每个会话的临时表。当连接关闭时,该区域的数据将被自动清除。换句话说,临时表的数据将被清除。


二、 共享内存


PostgreSQL的共享内存是指每个后台进程(backend process)共同使用的内存区域,下面列举了PostgreSQL中的共享内存以及它们的作用。

  • shared_buffer

PostgreSQL将表和索引中的数据块从持久存储加载到共享缓冲池中,然后直接对它们进行操作,从而提高效率。该区域的大小由参数shared_buffers控制,默认值是128MB。


  • wal_buffer

存放WAL日志数据。该区域的大小由参数wal_buffers控制,默认值是4MB。


  • effective_cache_size

该区域用于存储数据库优化器的相关数据。当前的数据库服务器可以提供额外的缓存空间时,如:内存的缓存空间、文件系统的缓存空间、CPU的缓存空间等,使用参数effective_cache_size可以控制这些缓存空间的总和。



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
存储 负载均衡 Cloud Native
gRPC的原理和实践
gRPC的原理和实践
1530 1
gRPC的原理和实践
|
运维 Kubernetes 监控
K8S异常诊断之俺的内存呢
本文讲述作者如何解决客户集群中出现的OOM(Out of Memory)和Pod驱逐问题。文章不仅详细记录了问题的发生背景、现象特征,还深入探讨了排查过程中的关键步骤和技术细节。
1192 108
K8S异常诊断之俺的内存呢
|
算法
初探PID—速度闭环控制
本文简单介绍了什么是PID,PID的作用,给出了PID实现程序。
1023 0
|
11月前
|
存储 关系型数据库 数据库
【赵渝强老师】国产金仓数据库的体系架构
金仓数据库(KingbaseES)是基于PostgreSQL开发的国产关系型数据库,具有自主知识产权。其体系结构涵盖逻辑存储、物理存储、进程与内存管理,支持高可靠性与性能优化,广泛应用于关键信息基础设施领域。
1479 1
|
消息中间件 监控 供应链
实时库存同步接口技术详解
本文详解实时库存同步接口的设计与实现,涵盖核心概念、技术方案、常见挑战及最佳实践,结合Python示例,助力开发者构建高效、可靠的电商库存系统。
|
编解码 缓存 监控
《首屏加载优化手册:Vue3+Element Plus项目提速的技术细节》
本文记录了Vue3+Element Plus开发的企业内部管理系统首屏加载优化实践。该系统因组件全量引入、图片未优化、接口调用无序,首屏加载达6秒,用户投诉频发。作者团队用Chrome DevTools定位瓶颈后,以“分阶段、抓核心”策略优化:代码层面拆分资源、按需引入组件;静态资源转WebP并适配分辨率;调整接口调用顺序,延迟非核心请求,还添加骨架屏优化体验。优化后首屏加载稳定在1.8-2.2秒,系统使用率提升12%。作者强调优化需贴合用户体验,建立监控体系,避免盲目追求技术指标。
714 6
|
SQL 安全 关系型数据库
PostgreSQL 18 发布
PostgreSQL 18重磅升级:新增异步I/O提升高并发性能,原生支持UUID v7增强索引效率,并优化并行查询、逻辑复制,强化安全与SQL功能,全面提升数据库性能与可靠性。
539 8
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
847 57
|
监控 网络协议 API
利用zabbix api批量添加数百台监控主机
利用zabbix api批量添加监控主机 在公司规模很庞大的时候,每次都手动添加监控主机将会很麻烦,我们可以利用zabbix的api去批量添加监控主机 本次我们将实现用一台主机虚拟出100台主机,并通过api的方式自动添加监控主机
1323 0
利用zabbix api批量添加数百台监控主机

热门文章

最新文章