为何PgSQL主进程挂了,数据库还可运行?

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:
 

数据库主进程挂了,原有的连接还能继续操作数据库,你信吗?下面,由DBA+杭州群联合发起人周正中告诉你,PostgreSQL是怎么可以做到的。

 

专家简介

  

20151030103031893.png

周正中

网名:德哥@Digoal

DBA+杭州群联合发起人之一

 

PostgreSQL中国社区发起人之一,负责杭州分会,兼任社区CTO一职。曾就职于斯凯网络,负责数据库部门。现就职于阿里巴巴,负责RDS PG内核组事务。

 

 

 

数据库主进程挂了,原有的连接还能继续操作数据库,PostgreSQL就可以做到,并且原来的进程对数据库的操作是持久化的,不会丢数据哦。这得益于PostgreSQL的进程结构设计。而且postmaster进程只负责了简单的工作,例如监听端口。

 

有人会问了,wal writer、backgroup writer进程都挂了,数据还能持久化?没错,因为backend process也可以完成这些操作,所以不用担心数据丢失。

 

创建测试表。

 

20151030103124775.jpg
 

将postgres主进程杀掉。

 

20151030103134501.jpg

 

杀掉主进程后,只剩下backend process和logger进程,(当然wal buffer和shared buffer还在)。

 

然后在backend process对应的会话中写入记录。可以正常操作。

 

20151030103158650.jpg

 

退出会话后,所有相关的进程都不在了,logger也退出了。

 

20151030103226590.jpg

 

启动数据库。

 

20151030103238820.jpg
 

查看不到之前插入的数据,原因是那个事务是异步的,而wal writter process进程当时已经不在了,backend process虽然可以完成flush wal buffer的功能,但是不像wal writter进程是周期性刷的,而是在申请不到BUFFER时才会触发刷BUFFER的动作。

所以一条记录就这样丢失了。

 

接下来,我们使用同步事务,可以保证数据不丢失。

 

20151030103250102.jpg

 

使用同步事务写入数据并退出。

 

20151030103302941.jpg

 

启动数据库。

 

20151030103315607.jpg

 

可以看到,数据是持久化存储的。

 

20151030103324837.jpg

 

注意,虽然backend process可以写wal buffer和shared buffer, 但是不能执行checkpoint, 因为这个操作是checkpoint做的,backend process只会告知它。当我们在postgres主进程被杀掉后,如果执行一个比较大的操作导致触发checkpoint的话,会在日志中看到这样的信息。

 

20151030103337340.jpg

 

包括autovacuum, stat collecter process都不在了,所以这些操作也会失败。

 

例如:

 

20151030103351509.jpg

 

可以看到对应的日志:

 

20151030103404572.jpg

 

统计信息进程没了,所以统计信息也无法获取。

 

20151030103412454.jpg

 

这里还引发一个问题,如果我们使用长连接来监控数据库状态的话,无法了解主进程是否健康,所以最好还是用短连接来监控数据库,至少可以判断认证这块还有主进程是否是正常的。不过短连接也有一定的问题,就是可能数据库的连接被占满了,无法获得连接。有利有弊,长连接+短连接的方式监控可能更加全面。

 

[其他]

 

关于crash自动重启的参数:

restart_after_crash (boolean)

 

20151030103428214.jpg

 

对应的代码,某些场景会导致数据库重启。

src/backend/postmaster/postmaster.c

 

20151030103440896.jpg

20151030103449839.jpg

 

例如autovacuum进程被kill。断开所有backend process,重启autovacuum lanucher。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-10-30

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
Oracle 关系型数据库 数据库
|
1月前
|
Linux
百度搜索:蓝易云【Linux系统ps命令:查看正在运行的进程】
通过这些简洁的ps命令用法,你可以方便地查看Linux系统中正在运行的进程信息。
45 1
|
1月前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
55 0
|
3天前
|
Java 程序员
Java多线程编程是指在一个进程中创建并运行多个线程,每个线程执行不同的任务,并行地工作,以达到提高效率的目的
【6月更文挑战第18天】Java多线程提升效率,通过synchronized关键字、Lock接口和原子变量实现同步互斥。synchronized控制共享资源访问,基于对象内置锁。Lock接口提供更灵活的锁管理,需手动解锁。原子变量类(如AtomicInteger)支持无锁的原子操作,减少性能影响。
17 3
|
6天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之运行run-application --target kubernetes-application执行,通过进程的返回码来决定作业是否成功,任务返回码都是0,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4天前
|
关系型数据库 MySQL API
实时计算 Flink版操作报错合集之同步MySQL数据到另一个MySQL数据库,第一次同步后源表数据发生变化时目标表没有相应更新,且Web UI中看不到运行的任务,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
29天前
|
监控 关系型数据库 分布式数据库
【PolarDB开源】PolarDB监控与报警系统构建:确保数据库健康运行
【5月更文挑战第23天】阿里云PolarDB因其存储计算分离、高兼容性等特性受企业青睐。为了确保其稳定运行,文章介绍了构建PolarDB监控与报警系统的做法。通过阿里云云监控服务开启和自定义监控视图,关注CPU、内存等关键指标,并设置告警规则。此外,通过自定义脚本与开源工具集成,满足特殊监控需求,实现全面、精准的监控报警,保障数据库健康运行。
261 2
|
29天前
|
SQL 关系型数据库 数据库
使用关系型数据库PgSql
【5月更文挑战第13天】`PgSql`表空间允许管理员自定义数据库对象文件的位置,以控制磁盘布局和优化性能,如将高频索引放于SSD,归档数据的索引放于普通磁盘。PostgreSQL支持多种索引类型,如B-tree、Hash等,`CREATE INDEX`用于创建索引,`SET default_tablespace`可设置默认表空间。触发器则是在特定操作后自动执行的函数,可用于表或视图,分为行级和语句级。事件触发器则对DDL事件作出反应。
61 0
使用关系型数据库PgSql
|
1月前
|
监控 Linux Shell
|
1月前
|
运维 Prometheus 监控
矢量数据库系统监控与运维:确保稳定运行的关键要素
【4月更文挑战第30天】本文探讨了确保矢量数据库系统稳定运行的监控与运维关键要素。监控方面,关注响应时间、吞吐量、资源利用率和错误率等指标,使用Prometheus等工具实时收集分析,并有效管理日志。运维上,强调备份恢复、性能调优、安全管理和自动化运维。关键成功因素包括建立全面监控体系、科学的运维策略、提升运维人员技能和团队协作。通过这些措施,可保障矢量数据库系统的稳定运行,支持业务发展。