当前位置: 首页 > news >正文

PG 库停库超时异常案例

文章目录

  • 现象
  • 官方文档
  • 停库底层流程:
  • 恢复脚本优化思路
  • 总结

现象

  1. 停库超时
<2024-11-29 12:50:43.022 UTC 87472 192.167.60.1(54862) PostgreSQL JDBC Driver postgres stk>FATAL:  terminating connection due to administrator command
<2024-11-29 12:50:43.022 UTC 108724 127.0.0.1(58913) PostgreSQL JDBC Driver postgres vehiclerecognize>FATAL:  terminating connection due to administrator command
...
2024-11-29 12:50:43.022 UTC 75724 127.0.0.1(55169) PostgreSQL JDBC Driver postgres test>FATAL:  terminating connection due to administrator command
<2024-11-29 12:50:43.072 UTC 69504    >FATAL:  terminating autovacuum process due to administrator command
<2024-11-29 12:50:43.449 UTC 88328 127.0.0.1(60033) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:50:43.494 UTC 90688 127.0.0.1(60034) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:50:43.727 UTC 109536 127.0.0.1(60035) [unknown] postgres test>FATAL:  the database system is shutting down
...
<2024-11-29 12:51:04.833 UTC 92964 127.0.0.1(60291) [unknown] [unknown] [unknown]>LOG:  wrong key in cancel request for process 0
<2024-11-29 12:51:04.900 UTC 106280 127.0.0.1(60292) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:51:05.156 UTC 100548 127.0.0.1(60293) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:51:05.366 UTC 84108 127.0.0.1(60294) [unknown] [unknown] [unknown]>LOG:  PID 99480 in cancel request did not match any process
...
<2024-11-29 12:56:43.887 UTC 78360 127.0.0.1(64920) [unknown] [unknown] [unknown]>LOG:  wrong key in cancel request for process 0
<2024-11-29 12:56:43.931 UTC 109516 127.0.0.1(64921) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:56:43.933 UTC 88528    >LOG:  shutting down
<2024-11-29 12:56:44.175 UTC 108644 127.0.0.1(64922) [unknown] [unknown] [unknown]>LOG:  wrong key in cancel request for process 0
<2024-11-29 12:56:44.219 UTC 100096 127.0.0.1(64923) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:56:44.269 UTC 103412 127.0.0.1(64958) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:56:44.304 UTC 99748 127.0.0.1(64959) [unknown] postgres test>FATAL:  the database system is shutting down
<2024-11-29 12:56:44.467 UTC 84828 127.0.0.1(64960) [unknown] [unknown] [unknown]>LOG:  wrong key in cancel request for process 0
<2024-11-29 12:56:44.501 UTC 98716 127.0.0.1(64961) [unknown] postgres uap>FATAL:  the database system is shutting down
<2024-11-29 12:56:44.577 UTC 92348 127.0.0.1(64962) [unknown] postgres test>FATAL:  the database system is shutting down
  1. 任务管理器查看 postgresql-x64-15 服务是 stopped
  2. pg_ctl status -D %PGDATA% 是 STOPPED
  3. postgres.exe 相关进程是不存在的 (说明 pub_postgresql 服务与 postgres 进程都是停止了的, 只是由于 我们数据库恢复脚本中停库超时达到 100秒, 则认为是超时了, 从而不继续运行了)

可以看到, 停库消耗了 6 分钟
初步怀疑是 停库过程中的 checkpoint 等导致的写操作, 被亚信杀毒软件影响到了, 导致写的过慢超时了

官方文档

参考官方文档 pg_ctl stop 如果不通过 -t 指定超时限制, 那么默认超时时间为 60 秒, 不管是 pg_ctl start 还是 pg_ctl stop 都是默认超时限制为 60 秒.

pg_ctl stop       [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]-t seconds
--timeout=seconds
Specifies the maximum number of seconds to wait when waiting for an operation to complete (see option `-w`). Defaults to the value of the `PGCTLTIMEOUT` environment variable or, if not set, to 60 seconds.

停库底层流程:

当您执行 net stop postgresql-x64-15pg_ctl stop -m fast 时,PostgreSQL 按以下顺序停止:

  1. 断开客户端连接
    主进程停止监听端口(5432),不再接受新的客户端连接。

    在这个阶段,您会发现 5432 端口已关闭。

  2. 回滚未完成事务
    PostgreSQL 将回滚所有未提交的事务,以保证一致性。这个过程可能耗时,尤其是有长事务或大量未写入的数据时。
  3. 终止后台子进程
    所有后台子进程(如 autovacuumbackground workersreplication workers 等)需要逐一终止。这可能因为某些进程被阻塞或超时而变慢。
  4. 写入检查点
    PostgreSQL 会将内存中的数据写入磁盘,更新数据文件的最新状态。如果数据库很大,或者有大量未完成的 WAL 日志,需要写入的内容会更多。
  5. 删除 postmaster.pid 文件
    最后,当所有工作完成后,PostgreSQL 会删除 postmaster.pid 文件,表明服务已完全停止。

恢复脚本优化思路

所以本测试环境,应该是处于停止的中间状态, 但是由于默认停库超时是 2h(注册服务时设置的), 而当前环境实际停库时间是 6 分钟, 恢复脚本中设置的超时时间是 100 秒, 所以提前就终止恢复流程了
因此, 我们可以从如下几方面来优化该脚本:

    1. 延长超时限制与服务注册时的限制保持一致;
    1. 在停库之前显示执行两次 checkpoint 操作.

总结

对于停库或者数据库重启操作
比较保险的做法是显示执行 checkpoint (这将有助于我们使得关闭时检查点非常轻量化,减少停机时间) ,
并且是连续执行两次 checkpoint (如果第一个 CHECKPOINT 很重,可能会花费时间,而在此期间由于持续写入,新的脏缓冲区会积累——我们通过第二个 CHECKPOINT 来减轻这一问题,使关闭检查点保持轻量且快速)

停止 PostgreSQL 包括三种模式 参考:

1. "Smart" mode disallows new connections, then waits for all existing clients to disconnect. If the server is in hot standby, recovery and streaming replication will be terminated once all clients have disconnected.
2. "Fast" mode (the default) does not wait for clients to disconnect. All active transactions are rolled back and clients are forcibly disconnected, then the server is shut down.
3. "Immediate" mode will abort all server processes immediately, without a clean shutdown. This choice will lead to a crash-recovery cycle during the next server start.

参考: https://postgres-howto.cn/#/./docs/2?id=%e6%80%bb%e7%bb%93

相关文章:

PG 库停库超时异常案例

文章目录 现象官方文档停库底层流程:恢复脚本优化思路总结 现象 停库超时 <2024-11-29 12:50:43.022 UTC 87472 192.167.60.1(54862) PostgreSQL JDBC Driver postgres stk>FATAL: terminating connection due to administrator command <2024-11-29 12:50:43.022 …...

redis下载、基础数据类型、操作讲解说明,持久化、springboot整合等

1 Redis是什么 官网&#xff1a;https://redis.io 开发者&#xff1a;Antirez Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库。 Redis是一个开源的、高性能的键值对存储系统&#xff0c;它支持多种数据结构&…...

[代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和

前言 哈希表是什么&#xff1f;一句话带你理解&#xff0c;简单来说我们对于杂乱的数据&#xff0c;怎么快速找到数据&#xff0c;如何做呢&#xff1f;一般的做法就是遍历复杂度为o(N)去找寻一个数据&#xff0c;但是吧&#xff0c;我们这样思考的话&#xff0c;还是花了大量时…...

【CSS】一篇掌握CSS

不是因为有了希望才去坚持,而是坚持了才有了希望 目录 一.导入方式 1.行内样式 2.内部样式 3.外部样式(常用) 二.选择器 1.基本选择器(常用) 1.1标签选择器 1.2类选择器 1.3id选择器 2.层次选择器 2.1后代选择器 2.2子选择器 2.3相邻兄弟选择器 2.4通用兄弟选择器…...

分层图最短路

常见情形&#xff1a; 对于边有k次操作的题。。 整体思想&#xff1a; 分层图最短路可以视作是dijkstra的一个扩展&#xff0c;通常用于处理N小于10000&#xff0c;或者是k不大的情形。整体有点类似于拆点。将一个点拆成k个点处理。层与层之间互不影响。 好了我就说这么多&…...

vue3 基本使用

Vue 3 提供了多种方式来构建用户界面&#xff0c;包括选项式 API 和 Composition API。下面我将详细介绍 Vue 3 的基本使用和语法&#xff0c;主要集中在选项式 API 上&#xff0c;因为这对于初学者来说更容易上手。 1. 创建 Vue 项目 如果你还没有一个 Vue 项目&#xff0c;…...

【maven-4】IDEA 配置本地 Maven 及如何使用 Maven 创建 Java 工程

IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;是一款功能强大的集成开发环境&#xff0c;广泛应用于 Java 开发。下面将详细介绍如何在 IDEA 中配置本地 Maven&#xff0c;并创建一个 Maven Java 工程&#xff0c;快速上手并高效使用 Maven 进行 Java 开发。 1. Maven …...

种花问题算法

假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xff0c;由若干 0 和 1 组成&#xff0c;其中 0 …...

对于大规模的淘宝API接口数据,有什么高效的处理方法?

1.数据分批处理 原理&#xff1a;当处理大规模数据时&#xff0c;一次性将所有数据加载到内存中可能会导致内存溢出。将数据分成较小的批次进行处理可以有效避免这个问题。示例代码&#xff1a;假设通过淘宝 API 获取到了一个包含大量商品详情的 JSON 数据列表&#xff0c;每个…...

openharmony 使用uvc库获取摄像头数据使用nativewindow显示

界面代码&#xff1a; XComponent({ id: xcomponentId, type: texture, libraryname: entry }).width(800).height(500) Natvie代码&#xff1a; 1、头文件 //NativeWindow #include <ace/xcomponent/native_interface_xcomponent.h> #include <cstdint> #incl…...

SQL Server 实战 - 多种连接

目录 背景 一、多种连接 1. 复合连接条件 2. 跨数据库连接 3. 隐连接 4. 自连接 5. 多表外连接 6. UNION ALL 二、一个对比例子 背景 本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题&#xff1a; 用例&#xff1a;SAP B1 的数据库工具&am…...

【手术显微镜】市场高度集中,由于高端手术显微镜的制造技术主要掌握于欧美企业

摘要 HengCe (恒策咨询&#xff09;是全球知名的大型咨询机构&#xff0c;长期专注于各行业细分市场的调研。行业层面&#xff0c;重点关注可能存在“卡脖子”的高科技细分领域。企业层面&#xff0c;重点关注在国际和国内市场在规模和技术等层面具有代表性的企业&#xff0c;…...

IDEA 2024 配置Maven

Step 1:确定下载Apache Maven版本 在IDEA 2024中&#xff0c;随便新建一个Maven项目&#xff1b; 在File下拉菜单栏中&#xff0c;找到Setings&#xff1b; 在Build&#xff0c;Execution&#xff0c;Deployment中找到Maven 确定下载的Apache Maven版本应略低于或等于IDEA绑…...

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤&#x1f381;框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 &#x1f381;框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…...

Flutter中的Future和Stream

在 Flutter 中&#xff0c;Future 和 Stream 都是用于处理异步操作的类&#xff0c;它们都基于 Dart 的异步编程模型&#xff0c;但是它们的使用场景和工作方式有所不同。以下是它们的区别以及各自适用的场景。 目录 一、Future1、基本使用2、异常处理1. catchError2. onError…...

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

spring boot支持那些开发工具?

Spring Boot 支持多种开发工具&#xff0c;以帮助开发者更高效地进行应用开发。以下是小编给大家分享几种常用的开发工具及其特点&#xff1a; IntelliJ IDEA&#xff1a; IntelliJ IDEA 是一款非常流行的 Java IDE&#xff0c;它提供了对 Spring Boot 的全面支持&#xff0c;…...

Go-MediatR:Go语言中的中介者模式

在Go语言中&#xff0c;确实存在一个与C#中的MediatR类似的组件包&#xff0c;名为Go-MediatR。 Go-MediatR是一个受.NET中MediatR库启发的Go语言实现&#xff0c;它专注于通过中介者模式简化命令查询责任分离&#xff08;CQRS&#xff09;模式的处理和在事件驱动架构中的应用…...

5.11【机器学习】

先是对图像进行划分 划分完后&#xff0c; 顺序读取文件夹&#xff0c;在文件夹里顺序读取图片&#xff0c; 卷积层又称为滤波器&#xff0c;通道是说滤波器的个数&#xff0c;黑白通道数为1&#xff0c;RGB通道个数为3 在输入层&#xff0c;对于输入层而言&#xff0c;滤波…...

在 CentOS 上安装 Docker:构建容器化环境全攻略

一、引言 在当今的软件开发与运维领域&#xff0c;Docker 无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性&#xff0c;为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建&#xff0c;还是生产环境的稳定部署&#xff0c;Docker 都展现出了…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...