【赵渝强老师】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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
SQL 安全 关系型数据库
PostgreSQL 18 发布
PostgreSQL 18重磅升级:新增异步I/O提升高并发性能,原生支持UUID v7增强索引效率,并优化并行查询、逻辑复制,强化安全与SQL功能,全面提升数据库性能与可靠性。
329 8
|
3月前
|
存储 关系型数据库 数据库
【赵渝强老师】国产金仓数据库的体系架构
金仓数据库(KingbaseES)是基于PostgreSQL开发的国产关系型数据库,具有自主知识产权。其体系结构涵盖逻辑存储、物理存储、进程与内存管理,支持高可靠性与性能优化,广泛应用于关键信息基础设施领域。
678 1
|
存储 负载均衡 Cloud Native
gRPC的原理和实践
gRPC的原理和实践
1218 1
gRPC的原理和实践
|
7月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
721 0
|
9月前
|
Kubernetes 安全 API
【赵渝强老师】Kubernetes的安全框架
Kubernetes集群安全框架由认证、鉴权和准入控制三个核心阶段组成。认证阶段验证客户端身份,通过API Server配置的认证模块完成;鉴权阶段检查请求者操作权限,确保合法操作;准入控制阶段拦截并修改请求参数,通过插件实现特殊任务处理。每个阶段均可扩展自定义插件,增强安全性。文内附图与视频详解各阶段流程与实例。
193 1
|
4月前
|
NoSQL 测试技术 Redis
【赵渝强老师】Redis数据的迁移
Redis提供move、dump+restore和migrate三种方式实现数据迁移。move用于库内迁移,dump+restore跨实例传输,migrate则原子性地完成键的迁移与删除,支持多键批量操作,提升效率。
267 5
|
4月前
|
Kubernetes 关系型数据库 MySQL
【赵渝强老师】使用Helm简化Kubernetes(K8s)应用的部署和管理
Helm是Kubernetes的应用包管理工具,可简化应用部署与管理。通过Chart模板定义应用配置,支持快速安装、升级和卸载。本文介绍Helm核心概念、部署方法,并实战演示部署MySQL和创建自定义Nginx Chart。
527 3
|
5月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
575 6
|
5月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
445 1