初探PostgreSQL体系结构

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 初探PostgreSQL体系结构

一、体系架构图

PostgreSQL使用一种客户端/服务器、进程架构模型。整体上包括以下几个部分:

内存区域

配置文件

服务进程

磁盘存储

PostgreSQL服务器本身是由多个进程组合而成的这些进程全部是被postmaster这个守护进程维护。

PG运用了传统的客户端和服务器架构来让用户访问数据库内容。

客户端包含了PG自带的‘psql’客户端。

PG和磁盘之间隔了一层shared memory(共享内存),大多数的数据都会被放在shared memory里面,因为访问速度快。

PG后台的checkpointer进程就是负责定期的把数据从shared memory存到磁盘上。

(一)共享内存区

共享内存区

shared_buffers

wal_buffers

clog_buffers

other buffers

shared_buffers —-共享缓冲区

表示数据缓冲区中的数据块的个数,每个数据块的大小是8KB。

数据缓冲区位于数据库的共享内存中,越大越好,不能小于128KB。

这个参数只有在启动数据库时,才能被设置。

默认值是128MB。

推荐值:1/4 主机物理内存

wal_buffers —- 日志缓存区的大小

可以降低IO,如果遇上比较多的并发短事务,应该和commit_delay一起用

存放WAL数据的内存空间大小,系统默认值是64K

(二)进程私有内存区

进程私用内存区

temp_buffers

work_mem

maintenance_work_mem

temp_buffers—-临时缓冲区

用于存放数据库会话访问临时表数据,系统默认值为8M。

可以在单独的session中对该参数进行设置,尤其是需要访问比较大的临时表时,将会有显著的性能提升

work_mem —- 工作内存或者操作内存。

其负责内部的sort和hash操作,合适的work_mem大小能够保证这些操作在内存中进行。

maintenance_work_mem —-维护工作内存

主要针对数据库的维护操作或者语句;VACUUM,CREATE INDEX,ALTER TABLE ADD FOREIGN KEY等操作。

在对整个数据库进行VACUUM或者较大的index进行重建时,适当的调整该参数非常必要

postresql文档提示在启用了autoacuum功能的情况下,该参数不能配置的过大

(三)主要的几个配置文件

上篇文章已经讲过,今天简单说一下。

二、进程通信

建立会话的过程

阶段一:客户端发起请求

阶段二:该阶段由主服务postmaster进程负责

服务器是否接受客户端的host通信认证

服务器对客户端进行身份鉴别

阶段三:阶段二通过之后,主服务进程为该客户端单独fork一个客户端工作进程postgres

阶段四:客户端与postgres进程建立通信连接,由postgres进程负责后续所有的客户端请求操作,直至客户端退出后,该postgres进程消失

客户端请求理解

打个比方,好像大家伙儿去酒店吃饭

三、物理结构

物理结构-数据存储方式

目录结构

默认表空间的数据文件存放在base目录

在pg_xlog保存WAL日志,只能通过软链改变它的位置(10版本之后命名为pg_wal)

段(Segments)

每一个表和索引都存放到单独的数据文件中

文件名是表或索引的文件结点(filenode)编号

如果表或索引超过 1 GB 就会被分割为多个段

第一个段以文件结点(filenode)编号命名,第二个以及之后的段以filenode.1, filenode.2形式命名

Page(Block)和Buffer

在磁盘中称为page,内存中称为buffer

默认为8k,可以在编译时指定block_size参数改变大小

Relation:表示表或索引

Tuple(row)表中的行

查看命令:

show data_directory;

select name,setting from pg_settings where category=’File Locations’;

目录含义

页结构

Page Header

Page的基本信息

指向空闲空间(free space)

长为 24 bytes

ItemIdData(Row/Index Pointers)

一个记录偏移量/长度(offset/length)的数组,

指向实际的记录(rows/index entries)

每一个 item 4字节

Free Space

未分配的空间

新指针(pointers )从这个区域的开头开始分配

新的记录(rows/index entries)从结尾开始分配

Items(Row/Index Entry)

实际的记录本身

Special

不同的索引访问方式相关的数据

在普通表中为空

四、逻辑结构

一个PG Cluster是在同一个os上的一个或者多个PG database的集合

在一个操作系统(OS)中,可以有一个或者多个PG Cluster

不同的PG Cluster是以port (端口号)作为区分的

这两个PG Cluster的软件版本甚至可以是不同的软件版本

假设同一个OS上有两个PG Cluster,每个PG Cluster中均可以有一个名为database1的PG database

Cluster

Cluster,物理盘上的数据库存储区,在SQL标准中的术语为catalog cluster在PostgreSQL中称之为database cluster,它在PostgreSQL中从下述两个方面区分:

物理存储的绝对路径 $PGDATA

各自的端口号 5432

database

每个 PostgreSQL 服务可以包含多个独立的 database

表空间

PostgreSQL中的表空间实际是物理盘上的一个存储目录,它从下述两个方面进行区分:

表空间名

定义表空间时使用的路径(同一个路径,不能同时用于不同的表空间)

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 存储 缓存
PG内核解读-第2节PostgreSQL体系结构
本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为三个部分: 1. PostgreSQL系统表 2. PostgreSQL初始化、启动、查询流程 3. PostgreSQL辅助进程
PG内核解读-第2节PostgreSQL体系结构
|
SQL 存储 缓存
【视频】PostgreSQL 体系结构 | 学习笔记
快速学习【视频】PostgreSQL 体系结构
【视频】PostgreSQL 体系结构 | 学习笔记
|
存储 SQL Cloud Native
直播预告 | PostgreSQL 内核解读系列第二讲:PostgreSQL 体系结构
本系列课程将面向DBA、高校学生、内核爱好者,介绍PG内核架构、各模块基本原理、用法、代码实现。希望通过课程学习,让没有内核经验的同学和DBA,也可以进行简单的特性开发,更深入理解PG配置和运行原理。本课程包含15个章节,系统化介绍PG架构、SQL引擎、执行引擎、存储引擎、并发控制、HA、分布式等核心技术原理和代码实现。
直播预告 | PostgreSQL 内核解读系列第二讲:PostgreSQL 体系结构
|
存储 关系型数据库 数据库
PostgreSQL体系结构
概述 PostgreSQL数据库是由基于文件系统物理文件建立的,在数据库的运行过程中,整套高效严谨的的逻辑管理着这些物理文件。通常叫这些物理文件为数据库。将这些物理文件、管理这些文件的进程、进程管理的内存 称为这个数据库的实例。
3054 0
|
存储 关系型数据库 数据库
理解PostgreSQL的体系结构
PostgreSQL可能是开源关系数据库市场中最先进的数据库。1989年首次发布,从此有了大量的改进和功能增强。根据db-engine统计,截止到目前,PostgreSQl在最常使用的数据库中,排名第四。
1939 0
|
关系型数据库 数据库 PostgreSQL
Postgresql数据库体系结构-进程和内存结构
数据库体系结构-进程和内存结构(Process and Memory Architecture) 进程结构 服务器进程postmaster后台工作进程后端进程 内存结构 本地内存区 work_memmaintenance_work_memtemp_buffers 共享内存区 shared buffer poolWAL buffercommit log 数据库启动过程 数据库连接过程 PostgreSQL是一个client/server架构rdbms,一个服务器上运行多个进程。
2278 0
|
存储 关系型数据库 数据库
Postgresql数据库体系结构-存储结构
PostgreSQL数据库体系结构-存储结构 存储结构 聚簇逻辑结构聚簇物理结构 聚簇数据库数据文件表空间数据文件内部结构tuple的读写方法 1、数据库聚簇逻辑结构(Logical Structure of Database Cluster) database...
6665 0
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
363 0
|
存储 缓存 关系型数据库
|
存储 SQL 并行计算
PolarDB for PostgreSQL 开源必读手册-开源PolarDB for PostgreSQL架构介绍(中)
PolarDB for PostgreSQL 开源必读手册-开源PolarDB for PostgreSQL架构介绍
419 0