讲师中心 微信公众号
AI工具推荐 视频效率加速

PostgreSQL怎么强制终止正在卡死的后端执行连接pg_terminate_backend

大宇酱_4340

大宇酱_4340

发布时间:2026-10-28 10:27:48

|

325人浏览过

|

来源于php中文网

原创

pg_terminate_backend有时不生效,因目标进程可能正执行无中断检查的C函数、卡在内核态、权限不足、或pid已失效;需先查pg_stat_activity确认实时状态,再按需选用pg_cancel_backend(仅取消查询)或pg_terminate_backend(终止连接并回滚事务)。

postgresql怎么强制终止正在卡死的后端执行连接pg_terminate_backend

pg_terminate_backend 为什么有时不生效?

直接执行 SELECT pg_terminate_backend(12345); 返回 true,但目标会话依然卡在 active 或 idle in transaction 状态——这不是你操作错了,而是 PostgreSQL 的终止信号被阻塞了。常见于以下情况:

  • 目标进程正执行 C 函数(如自定义的无限循环 loop()),且未调用 CHECK_FOR_INTERRUPTS(),无法响应中断信号
  • 进程卡在内核态(比如等待磁盘 I/O、锁或网络响应),此时信号暂不被处理
  • 权限不足:执行者不是超级用户,或不是该连接的拥有者(8.4+ 默认需 superuser 或同用户)
  • pid 已失效:查询 pg_stat_activity 时拿到的是旧 pid,实际进程已退出或被复用

如何确认目标 pid 并安全终止?

别靠猜,先查实时状态。重点过滤出真正“卡死”的会话,避免误杀健康连接:

  • 查所有非空闲且运行超 5 分钟的活跃查询:SELECT pid, usename, application_name, client_addr, state, query, now() - backend_start AS up_time FROM pg_stat_activity WHERE state = 'active' AND now() - backend_start > interval '5 minutes';
  • 查长时间空闲但事务未结束的会话(最常阻塞 DDL):SELECT pid, usename, state, backend_start, xact_start, query FROM pg_stat_activity WHERE state = 'idle in transaction' AND now() - xact_start > interval '10 minutes';
  • 若需终止整个数据库的所有非超级用户连接(如准备 DROP DATABASE):SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'your_db' AND usename != 'postgres';

pg_cancel_backend 和 pg_terminate_backend 到底选哪个?

二者不是替代关系,是不同粒度的干预手段:

  • pg_cancel_backend(pid):只中断当前正在执行的 SQL,连接保持,事务仍处于打开状态。适合“这个查询太慢了,重试一次就行”的场景
  • pg_terminate_backend(pid):断开 TCP 连接,强制回滚整个事务,释放该后端进程占用的所有资源(内存、锁、临时表等)。适合连接泄漏、死锁、空闲事务长期不提交等情况
  • 典型误用:对 idle in transaction 会话只用 pg_cancel_backend ——它根本没在执行查询,所以什么也不会发生;必须用 pg_terminate_backend

批量终止和脚本化操作要注意什么?

手动一条条执行 pg_terminate_backend 效率低还容易漏,但批量操作有风险:

  • 生成终止语句前务必加 WHERE 条件限制范围,例如:SELECT 'SELECT pg_terminate_backend(' || pid || ');' FROM pg_stat_activity WHERE state = 'idle in transaction' AND now() - xact_start > interval '30 minutes';
  • 不要无条件终止所有 idle 连接——很多连接池(如 PgBouncer、HikariCP)会维持长连接用于复用,杀掉反而引发重连风暴
  • 生产环境建议先用 pg_cancel_backend 尝试,10 秒后仍未退出再升级为 pg_terminate_backend,留出缓冲窗口
  • 注意:PostgreSQL 不支持事务内执行 pg_terminate_backend,也不支持在函数中嵌套调用它来“自毁”

真正卡死的进程(比如陷入 C 层死循环)可能完全无视 pg_terminate_backend,这时只能考虑操作系统级 kill(kill -9 对应后端进程 PID),但这是最后手段——它绕过 PostgreSQL 的清理逻辑,可能导致共享内存残留或 WAL 同步异常。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2683

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6830

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6286

2024.03.19

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4689

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

647

2023.11.16

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有l、d、d5、di、ds、dv、df、dn、db、dg、dp、c、pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

1396

2023.11.20

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

480

2026.02.12

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 0.1万人学习

SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn