简介:
欢迎进入我们进入Postgresql内部运作(The Internals of PostgreSQL)的第2章。在本章中,我们深入研究了PostgreSQL的过程和内存体系结构,阐明了使这种强大的关系数据库管理系统滴答的复杂机制。了解基础过程体系结构对于有效地优化性能和管理数据库群集至关重要。所以,让我们潜入!
2.1流程体系结构:
PostgreSQL在客户端/服务器模型上运行,采用在单个主机上运行的多进程体系结构。 PostgreSQL Server由几种类型的流程组成,共同工作,以无缝管理数据库群集。让我们仔细研究这些过程:
2.1.1 Postgres服务器过程:
Postgres Server进程(以前称为“邮政局长”)是负责管理PostgreSQL Server中所有其他过程的父进程。此过程协调其他过程的生命周期,接受客户端连接并促进不同过程之间的通信。
使用启动选项调用 pg_ctl
实用程序时,Postgres Server Process初始化并在RAM中分配共享存储区域。如果需要,它还启动了各种背景过程,与复制相关的过程和背景工作过程。服务器流程在等待传入的客户端连接并为每个连接启动一个后端过程。
Postgres Server进程在指定的网络端口上听,默认端口为5432。虽然可以在同一主机上运行多个PostgreSQL服务器,但要配置每个服务器以在唯一的端口号上侦听(例如5432,5433)避免冲突。
2.1.2后端过程:
后端过程由Postgres Server流程启动,并负责处理连接客户端发出的查询。每个后端进程都维护与其关联客户端的TCP连接,并管理客户端和PostgreSQL Server之间的所有通信。
在建立与PostgreSQL Server的连接时,客户端必须明确指定他们打算使用的数据库。每个后端进程专门在一个数据库上运行,确保数据完整性和隔离。
PostgreSQL支持来自多个客户端的同时连接,从而允许与服务器的并发交互。允许客户端的最大数量由配置参数“ max_connections”,的默认值为100。通过调整此参数,管理员可以管理客户端连接的并发级别和资源分配。 /p>
值得注意的是,当许多客户(例如Web应用程序)经常建立并终止与PostgreSQL Server的连接时,它会影响性能。在这种情况下,连接建立和后端过程创建的开销变得很重要,尤其是考虑到PostgreSQL并不能本地实施连接池。
为了减轻此问题,通常使用诸如“ pgbouncer” 或“ pgpool-ii。” 的汇总中间件。以及PostgreSQL Server,管理连接池并减少建立新的后端流程的开销。使用连接池中间件可以增强数据库服务器的整体性能和可扩展性,尤其是在具有高连接周转的情况下。
2.1.3背景过程:
除了Postgres服务器和后端流程外,PostgreSQL还采用各种背景过程来执行必需的数据库管理任务。这些过程处理关键操作(例如吸尘器),通过删除过时或过时的数据来收回磁盘空间,以及检查点(将修改的数据从内存到磁盘编写的检查点)。通过将这些资源密集型任务卸载到专用的背景过程中,PostgreSQL Server可以确保活动客户端连接的最佳性能。
2.2内存体系结构:
PostgreSQL的内存体系结构可以分为两个主要领域:本地内存和共享内存。这些领域具有不同的目的,并在数据库系统的有效操作中起着至关重要的作用。
2.2.1本地记忆区域:
PostgreSQL中的每个后端过程都为查询处理过程中的独家使用分配了本地存储区域。局部记忆区域进一步分为几个子区域,每个分区都有特定目的。表2.1概述了本地内存中的主要子区域。您可以在表中提到的章节中深入探讨这些子订阅的细节
2.2.2共享存储区域:
除本地内存外,PostgreSQL还在服务器启动时分配共享存储区域。 PostgreSQL Server中的所有进程都利用了此共享存储区域,从而促进了有效的过程间通信和数据共享。与本地内存区域类似,共享存储区域分为固定尺寸的子区域,每个子区域都有特定功能。
结论:
了解PostgreSQL的过程和内存体系结构对于优化性能,管理数据库群集以及确保您的PostgreSQL驱动应用程序的平稳操作至关重要。通过理解Postgres服务器流程,后端过程和背景过程的角色和交互,您可以深入了解如何处理查询以及如何管理资源。此外,对内存架构的熟悉使您可以微调内存设置,改善查询执行速度和整体系统性能。
请记住,掌握PostgreSQL架构的复杂性使您能够利用这种强大的关系数据库管理系统的全部潜力,使您能够构建可轻松处理数据的强大而有效的应用程序。因此,让我们继续进入Postgresql的深处。
请继续关注下一个博客中PostgreSQL数据存储的内部工作!。