PG内核解读-第1节PostgreSQL系统概述

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分:1. 本系列教程介绍2. PostgreSQL概述(历史、架构)3. PostgreSQL安装启动4. PostgreSQL常用命令、调试


PG内核解读-第1节PostgreSQL系统概述

 

一、本系列教程介绍


image.png

本课程主要面向PostgreSQL DBA、高校学生、内核开发爱好者。解决PostgreSQL DBA遇到的问题,希望用户可以通过查看代码深入了解PG原理。

让没有接触过数据库内核的同学,了解内核基本原理、代码实现,可以完成简单功能开发,大家一起共同学习、共同成长。

本系列的章节设置参照彭智勇老师的《PostgreSQL数据库内核分析》,内容互补。每章节先介绍架构、原理、使用,再介绍代码。

 

二、PostgreSQL概述(历史、架构)

image.png

PostgreSQL是一个功能强大的开源对象关系型数据库系统,使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。


PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。


PostgreSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。

image.png

从数据库开源角度来看,MySQL和PostgreSQL是最重要的两个产品。阿里数据库基于MySQL和PostgreSQL已有的开源产品主要有:单机数据库AliSQL;分库分表中间件TDDL;分布式数据库PolarDB for PG与PolarDB-X;Key-Value Cache的Tair。

image.png

如上图所示,是PostgreSQL的架构。其中,Postmaster是PostgreSQL启动第一个进程。Postmaster会执行恢复、初始化内存共享进程。客户端发起链接请求时,它还负责创建后端进程。


backend processes通过TCP协议和客户端建立通讯,当客户端断开时,连接消失。允许多个客户端同时连接,连接数由max_connections参数控制,默认是100,如果客户端频繁的和服务端建立连接然后断开,会增加数据库的开销,导致服务器负载不正常,因为数据库本身不提供连接池的功能,如果有需要,可以使用pgbouncer或者pgpool-II。


在Shared Memory方面,主要作为数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和Commit log缓冲区也存在于Shared Memory中。除此之外,Shared Memory保存了进程信息、锁信息、全局统计信息等。


Individual Memory用于存储一些不需要全局存储的数据,主要有Work_mem、Maintenance_work_mem和临时缓冲区。其中,临时缓冲区用于访问临时表的本地缓冲区

image.png

上图是PostgreSQL的逻辑架构,在默认情况下,客户端通过端口“5432”连接到集群‘data’,默认数据库是‘postgres',默认模式‘public'。它们也可以指定其他连接属性。


系统模式主要有pg_catalog、information_schema、pg_temp等等。

如果多个集群同时在一台服务器上,每个集群都单独管理。每个管理的实例会使用不同的端口。


image.png

传统数据库集群,通过配置数据文件,将其存储在集群的数据目录中,通常称为PGDATA。常见位置PGDATA是/var/lib/pgsql/data。在同一台机器上由不同服务器实例管理的多个集群。其中,base是每个数据库对于的子目录的子目录;global包含了集群范围的表的文件和全局控制信息等。


如上图所示,该PGDATA目录包含几个子目录和控制文件。除此之外,集群配置文件postgresql.conf、pg_hba.conf和pg_ident.conf一般存储在PGDATA。

image.png

如上图所示,是PostgreSQL模块和代码目录结构。当Main函数进来之后,启动Postmaster进程,通过Postmaster发送不同的Postgres进程。如果Postgres收到Libpq请求,最终会让执行引擎来执行相关命令。


在这一过程中,PostgreSQL依赖了底层原数据的提取方法。上图目录包括了相关的执行引擎,正则处理,全文检索等等,整个结构清晰可见。

image.png

PostgreSQL在执行initdb的时,会初始化一个目录,这个目录会生成相关的子目录和一些文件。其中,在data目录下,包含了数据库用户所创建的各个数据库,同时也包括postgres、template0和template1的pg_default tablespace。


当文件存储超出1G,PostgreSQL会将其拆分成多个文件来,而拆分的文件名将由pg_class中的relfilenode字段来决定。


PostgreSQL的日志文件主要包括运行日志文件,重做日志文件,事务日志文件,服务器日志文件。


PostgreSQL的控制文件主要记录了数据库相关的运行信息比如id,open,wal,checkpoint的位置等等,其中controlfile是很重要的文件。


PostgreSQL的WAL文件通常默认保存在$PGDATA/pg_wal目录下。文件名称16进制的24个字符组成,每8个字符一组

 

三、PostgreSQL安装启动

image.png

接下来,开始PostgreSQL安装启动。相关步骤如上图所示,在网站下载相关源码之后,对源码进行编译安装,然后设置环境变量。

image.png

安装PostgreSQL之后,初始化PG并启动数据库,相关代码如上图所示。执行相关命令,初始化数据库之后,修改相关参数,通过执行启动和停止命令,确定数据库是否正常运行。

 

四、PostgreSQL常用命令、调试

image.png

接下来,介绍一些PostgreSQL的常用命令。首先,使用psql连接数据库。

连接数据库之后,输入数据库密码,创建一个表,插入信息并查询。

image.png

PostgreSQL的常用命令如上图所示,用户可以根据相关代码进行调试

image.png

本次演示使用的开发工具是Source InsightSource Insight支持绝大多数语言,如C、C++、ASM、PAS、ASP、HTML等等。Source Insight不仅支持快速访问源代码和源信息,而且能显示reference trees,class inheritance diagrams和call trees。

image.png

接下来,开始演示上述地部分命令。用户可以在相关地址下载源码:

https://github.com/postgres/postgres.git

image.png

接下来,调用configure的相关文件。首先执行命令,获取Debug版。相关命令如下:


./configure--prefix=/home/michael.yw/pghome--enable-debug--enable-cassert CFLAGS="-ggdb-O0-g3-Wall-fno-omit-frame-pointer-fstack-protector-strong


然后,开始准备编译,相关命令如下:make-sj&&make instal

image.png

接下来,调用命令,设置系统的环境变量。用户需要根据自己的位置对命令进行修改,相关命令如下:

vi~/.bashrc

 

export PATH="/home/michael.yw/pghome/bin:$PATH"

export LD_LIBRARY_PATH="/home/michael.yw/pghome/lib:$LD_LIBRARY_PATH"

export PGHOME="/home/michael.yw/pghome"

export PGDATA="/home/michael.yw/pgdata"

 

source~/.bashrc

image.png

完成上述操作之后,开始初始化数据库,相关代码如下:

initdb-D/home/michael.yw/pgdata

image.png

然后,开始配置相关参数,具体参数如下:

max_connections=100

max_wal_senders=10

max_replication_slots=10

max_worker_processes=10

shared_preload_libraries='pg_stat_statements'

listen_addresses='*'

port=6688

logging_collector=on

log_directory='log'

log_filename='postgresql-%a.log'

log_truncate_on_rotation=on

log_rotation_age=1d

log_rotation_size=0

log_checkpoints=on

log_connections=on

log_disconnections=on

log_error_verbosity=verbose

log_line_prefix='%m[%p]'

log_timezone='PRC'

log_autovacuum_min_duration=0

image.png

接下来,开始启动数据库。相关命令如下:

pg_ctl-D/home/michael.yw/pgdata-l/home/michael.yw/pgdata/logfile1 start

image.png

接下来,使用psql连接数据库。相关命令如下:

psql-p 6688-d postgres

image.png

然后,开始发起请求。创建一个表,相关命令如下:create table t1(a int,b text);

然后,插入一条数据。相关命令如下:insert into t1 values(1,'aa');

然后,查询一条数据,相关命令如下:select*from t1;

image.pngimage.png 

接下来,查看psql常用命令。相关位置如下:

cd/home/michael.yw/pghome/bin

ll/home/michael.yw/pghome/bin

pg_config工具打印当前PostgreSQL的配置参数,方便与PostgreSQL交互的软件包找到所需的头文件和库。

pg_ctl命令为PostgreSQL服务端应用程序,可以用来初始化,启动和停止及控制PostgreSQL服务器。

pg_dump用于备份PostgreSQL数据库。即使数据库正在被使用,它也能创建一致备份。pg_dump不阻塞其他用户读取或写入数据库。pg_dump只转储单个数据库。

如果用户需要备份一个对于所有数据库公共的全局对象例如角色和表空间,应使用pg_dumpall。

在PG调试方面,select pg_backend_pid()意为查看当前连接pid。

image.png

接下来,开始调试PG。相关命令如下:ps-ef|grep michael


当psql链接到PostgreSQL数据库后,可以使用gdb跟踪PID进程。其中bt用来显示堆栈;f 8查看堆栈中不同层级函数;l查看周围代码;C+x a查看代码。

image.png

接下来,设置断点。相关命令如下:b exec_simple_query;

image.png

然后,显示断点。相关命令如下:info b。

image.png

完成上述操作之后,开始调试PG。相关命令如下:select*from t1

image.png

如上图所示,是Source Insight的使用界面。

image.png

用户可以根据函数,通过刷新,找到引用该函数的ID,从而确定引用该函数的用户。方便用户清楚的看到各函数间的调用关系。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4天前
|
存储 关系型数据库 Java
polardb有没有搞过pg 全量及增量备份管理的
【1月更文挑战第3天】【1月更文挑战第11篇】 polardb有没有搞过pg 全量及增量备份管理的
42 1
|
4天前
|
关系型数据库 Serverless 分布式数据库
高峰无忧,探索PolarDB PG版Serverless的弹性魅力
在数字经济时代,数据库成为企业命脉,面对爆炸式增长的数据,企业面临管理挑战。云原生和Serverless技术革新数据库领域,PolarDB PG Serverless作为阿里云的云原生数据库解决方案,融合Serverless与PostgreSQL,实现自动弹性扩展,按需计费,降低运维成本。它通过计算与存储分离技术,提供高可用性、灾备策略和简化运维。PolarDB PG Serverless智能应变业务峰值,实时监控与调整资源,确保性能稳定。通过免费体验,用户可观察其弹性性能和价格力,感受技术优势。
|
4天前
|
关系型数据库 测试技术 Serverless
5分钟免费体验PolarDB PG版Serverless的极致弹性!
基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDB PG版 Serverless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开放定制修改、可重复验证。参与活动即有机会获得小爱随身音响、体脂秤、极客时间VIP月卡、鼠标垫等精美礼品。
|
4天前
|
负载均衡 监控 关系型数据库
PostgreSQL从小白到高手教程 - 第48讲:PG高可用实现keepalived
PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
76 1
|
4天前
|
SQL 关系型数据库 分布式数据库
|
4天前
|
SQL 关系型数据库 数据库
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
PostgreSQL技术大讲堂 - 第44讲:pg流复制部署
81 0
|
4天前
|
SQL 关系型数据库 数据库
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
159 0
|
4天前
|
安全 关系型数据库 数据库
上新|阿里云RDS PostgreSQL支持PG 16版本,AliPG提供丰富自研能力
AliPG在社区版16.0的基础上,在安全、成本、可运维性等多个方面做了提升,丰富的内核/插件特性支持,满足业务场景的需求
|
4天前
|
存储 SQL 关系型数据库
postgresql从入门到精通 - 第37讲:postgres物理备份和恢复概述
postgresql从入门到精通 - 第37讲:postgres物理备份和恢复概述
167 1
|
5月前
|
关系型数据库 数据库 PostgreSQL
flink postgresql cdc实时同步(含pg安装配置等)
flink postgresql cdc实时同步(含pg安装配置等)
202 0

相关产品

  • 云原生数据库 PolarDB
  • http://www.vxiaotou.com