PostgreSQL开发与实战(6)体系结构1

news2024/10/6 15:29:18

作者:太阳

一、进程结构

在这里插入图片描述

PG数据库启动时会先启动一个主进程(9.3之前称为postmaster,9.3以后称为postgres server process),然后fork出一些辅助子进程(backend、backgroud相关进程),不同的辅助子进程负责不同的工作。当客户端请求访问时,客户端先与主进程创建连接并进行身份验证,身份验证成功后fork出一个子进程(服务进程)为这个连接服务。所以说PG数据库其实是一个多进程架构模型。

postgres server process 是所有进程的父进程
backend process 每一个客户端的连接都有一个后端进程存在
backgroud processes 为管理数据库而产生的一些进程
backgroud work processes 9.3以后版本开始有这个进程,这里不做详细介绍

1.1 postgres server process(主进程)

postgres server process(守护进程)
早期版本叫做postmaster进程,它是postgres数据库的核心,整个数据库的总控进程。当数据库启动后会从物理内存中分配内存给shared memory,然后产生很多其他的backgroup processes ,等待客户端来连接,每产生一个连接就会生成一个backend process。一个postgres server process只能监听一个端口,默认端口是5432。
生产中数据库启停使用更多的是pg_ctl命令,而 pg_ctl 命令其实是对postgres命令的一个包装,而postmaster其实是postgres的一个链接。
postmaster主进程的功能:

  • 数据库的启停

  • 监听客户端连接,默认为每个客户端连接fork单独的postgres服务进程

  • 当服务进程出错时进行修复

  • 管理数据文件

  • 管理数据库运行相关的辅助进程

    当客户端调用接口像数据库发起连接请求,守护进程postmaster会fork单独的服务进程postgres 为客户端提供服务,此后由postgres服务进程为客户端执行各种命令,客户端也不需要postmaster进行中转,直接与服务进程postgres进行通讯。

1.2 backgroud processes(辅助子进程)

# ps -ef | grep postgres
postgres  9011     1  0 927 ?       00:00:15 /usr/local/pgsql/bin/postgres
postgres  9012  9011  0 927 ?       00:00:00 postgres: logger
postgres  9014  9011  0 927 ?       00:00:01 postgres: checkpointer
postgres  9015  9011  0 927 ?       00:00:11 postgres: background writer
postgres  9016  9011  0 927 ?       00:00:11 postgres: walwriter
postgres  9017  9011  0 927 ?       00:00:12 postgres: autovacuum launcher
postgres  9018  9011  0 927 ?       00:00:01 postgres: archiver   last was 0000000100000000000000AB
postgres  9019  9011  0 927 ?       00:00:22 postgres: stats collector
postgres  9020  9011  0 927 ?       00:00:00 postgres: logical replication launcher
root     28788 27741  0 16:03 pts/2    00:00:00 grep --color=auto postgres
logging collector (logger)

日志进程,PostgreSQL的默认日志是关闭的,可在postgres.conf文件中logging_collect、log_directory、log_filename、log_rotation_age、log_rotation_size相关参数进行设置,打开日志收集,主进程就会启动logger日志进程。该进程会收集所有其他的进程的日志信息。
checkpointer
数据库的检查点进程
background writer 进程
后台写进程,主要负责把共享内存(shared buffer pool)中的脏页周期性的写到磁盘。
autovacuum launcher 进程
自动清理进程,主要负责对已经删除标记的数据进行清理。在PG数据库中delete操作只是对原记录进行delete的打标,update同样也是对原记录进行delete打标并插入一条新数据,被delete打标的记录并不马上做删除处理,而是通过 autovacuum 进程来对历史无效数据进行清理,为vacuum process周期性的调用autovacuum work processes,释放磁盘空间。
archiver 进程
归档进程,主要负责对wal日志进行备份归档。wal日志是循环覆盖的,所以就有了 archiver(9.3之前叫pgarch) 进程,可以保证wal日志在覆盖前进行备份归档,另外pg基于时间点恢复也是利用该进程进程,对全备之后的位点日志进行归档,保证全备文件+wal日志恢复至任意时间点。
stats collector 进程
统计数据收集进程,主要负责收集表数据的统计信息以用于数据库优化器的代价估算。pg_statistic表存储了pgstat进程采集的各类统计信息。
wal write 进程
预写日志进程,保证数据库在修改数据之前必须先将对应的变更操作写入到wal日志并进行持久化到磁盘。保证数据库即使异常宕机,可以可以通过wal日志进行崩溃恢复。

1.3 backend processes (服务进程)

服务进程
客户端连接进程,通过TCP/IP协议和客户端建立通讯,当客户端发起连接请求时,首先与postmaster进行连接并进行身份验证,身份验证通过后postmaster会启动一个子进程为这个连接服务,也就是服务进程。
postgres允许多个客户端同时连接,连接数由max_connections参数控制,默认是100,数据库本身不提供连接池的功能,如果频繁的创建/断开连接将对数据库带来一定的资源消耗。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go-知识简短变量声明

Go-知识简短变量声明 1. 简短变量声明符2. 简短变量赋值可能会重新声明3. 简短变量赋值不能用于函数外部4. 简短变量赋值作用域问题5. 总结 githuio地址:https://a18792721831.github.io/ 1. 简短变量声明符 在Go语言中,可以使用关键字var或直接使用简短…

2024新鲜出炉阿里巴巴面试真题,如果不想35岁被淘汰这篇文章必看

最近看到群里看到一个女生,讲述了她从开始选择Android,经过非常努力的学习和挣扎,然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜,如果早几年入行可能结果会比现在好很多,但可惜,这就是…

Thinkphp5.1中,将数组赋值给js使用

一、例如Thinkphp5.1中的的代码是这样的 $data [status > 1,msg > 加载成功,data > [id > 1,username > 小洪帽,] ];$this->assign(data,$data);二、JS代码接收PHP中的数组 注意 <> 符号是不需要放引号的。 let arr <?json_encode($data)?>…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载&#xff0b;安装&#xff1a; 检查安装情况&#xff1a; 配置环境变量&#xff1a; 搞定了&#xff01;&#xff01;&#xff01; 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …

CSS极速入门

CSS介绍 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS能够对网页中元素位置的排版进行像素级的精确控制,实现美化页面的效果.能够做到页面的样式和结构分离. CSS可以理解为"东方四大邪术"的化妆术. 对页面展示进行化妆. 基本语法规…

双指针解决三元组问题

山海自有归期 风雨自有相逢 CSDN 请求进入专栏 ​​​​ 是否进入《数据结构专栏》? 确定 目录 三数之和 题目描述 输入输出样例 思路 代码测试 复杂度分析 三数之和 题目链接&#xff1a;三数之和 题目描述 给你一个整数数组 nums &#…

java上传本地文件到服务器共享

在Windows系统中,将本地文件夹中的某个文件上传到另一台Windows服务器电脑上,前提:两台电脑网络互通,要接收文件的Windows服务器文件夹开启了共享,可以被本机用如下方式进行写入和读取: 如何配置服务器共享请自行百度查找。 所需要的maven依赖如下: <dependency>…

初探深度学习-手写字体识别

前言 手写数字的神经网络识别通常指的是通过训练有素的神经网络模型来识别和分类手写数字图像的任务。这种类型的任务是机器学习和计算机视觉领域的一个经典问题&#xff0c;经常作为入门级的图像识别问题来展示和测试各种机器学习算法的能力。在实际应用中&#xff0c;手写数…

比肩Gen-2,全新开源文生视频模型

著名开源平台Stability.ai在官网宣布&#xff0c;推出全新文生视频的扩散模型Stable Video Diffusion&#xff0c;已开源了该项目并公布了论文。 据悉&#xff0c;用户通过文本或图像就能生成高精准&#xff0c;14帧和25帧的短视频。目前&#xff0c;Stable Video Diffusion处…

为 OpenBMC 添加一个新的系统

1. 前言 在上一篇文章中向大家介绍了 OpenBMC 的是什么以及它的作用和应用场景&#xff0c;并且以一个自带的示例平台 romulus 展示了从下载源码包开始到启动系统并访问 Web 控制页面的整体构建流程。 通过前文已经了解到如何为已有的平台构建系统镜像&#xff0c;下面我们来…

如何使用LEAKEY轻松检测和验证目标服务泄露的敏感凭证

关于LEAKEY LEAKEY是一款功能强大的Bash脚本&#xff0c;该脚本能够检测和验证目标服务中意外泄露的敏感凭证&#xff0c;以帮助广大研究人员检测目标服务的数据安全状况。值得一提的是&#xff0c;LEAKEY支持高度自定义开发&#xff0c;能够轻松添加要检测的新服务。 LEAKEY主…

自动灭火贴有用吗?搞清楚自动灭火贴的使用范围很关键!

近年来&#xff0c;伴随着新能源车辆的自燃案例频频发生&#xff0c;许多新型自动灭火产品走红网络。灭火球、灭火宝、灭火手雷......层出不穷的新型产品褒贬各异&#xff0c;哪怕是目前占领市场份额较多的自动灭火贴也不乏有人心里嘀咕&#xff1a;自动灭火贴好用吗&#xff1…

什么是Docker容器?

Docker是一种轻量级的虚拟化技术&#xff0c;同时是一个开源的应用容器运行环境搭建平台&#xff0c;可以让开发者以便捷方式打包应用到一个可移植的容器中&#xff0c;然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机&#xff0c;Docker容器提供轻量化的…

Linux编程3.3 进程-进程的终止

1、正常终止 从main函数返回调用exit(标准C库函数)调用_exti或_Exit&#xff08;系统调用&#xff09;最后一个线程从其启动例程返回最后一个线程调用 pthread exit 2、异常终止 调用abort接受到一个信号并终止最后一个线程对取消请求做处理响应 3、进程返回 通常程序运行…

谷歌Gemini批量多线程写原创文章API软件-支持双标题违禁词过滤

谷歌Gemini批量多线程写原创文章软件介绍&#xff1a; 1、Gemini 是谷歌筹备了一年之久的GPT4真正竞品&#xff0c;也是目前谷歌能拿出手的功能最为强悍、适配最为灵活的大模型。 2、谷歌Gemini目前免费申请key&#xff0c;key没有额度限制&#xff0c;可以一直写文章。 3、谷…

Mint_21.3 drawing-area和goocanvas的FB笔记(四)

Cairo图形输出 cairo的surface可以是pixbuf, 可以是screen, 可以是png图&#xff0c;也可以是pdf文件 、svg文件、ps文件&#xff0c;定义了surface就可以用cairo_create(surface)产生cairo context, 操作cairo context就可以方便地在surface上画图&#xff0c;如果surface是p…

LeetCode-第137题-只出现一次的数||

1.题目描述 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 2.样例描述 3.思路描述 先把数组排序&am…

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟&#xff1a;“师兄&#xff0c;我又被鄙视了。说我的系统太差&#xff0c;测试不过关。” 我&#xff1a;“怎么说&#xff1f;” 师弟&#xff1a;“每次发布版本给程夏&#xff0c;都被她发现一些bug&#xff0c;太丢人了。师兄&#xff0c;有什么方法来衡量测试的…

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…

2024年展望Android原生开发的现状,2024网易Android高级面试题及答案

没有稳定的工作&#xff0c;只有稳定的能力。 又到了万物复苏的季节&#xff0c;在程序猿这个行当里&#xff0c;作为 Android 开发出生的&#xff0c;在经历了八年的脱发生涯后&#xff0c;有了越来越多的想法和感触 趋势 随着各类移动跨平台的兴起&#xff0c;在 ReactNati…