Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何杀掉pg数据库正在运行的sql

如何杀掉pg数据库正在运行的sql

作者头像
数据库架构之美
修改于 2019-12-27 12:09:26
修改于 2019-12-27 12:09:26
4.1K00
代码可运行
举报
运行总次数:0
代码可运行

我们在生产环境可能经常遇到长sql,长sql对数据库的影响还是挺大的,不仅可能对主机资源消耗较大,还可能会阻塞其他sql的正常执行,所以对于长sql我们要尤其注意。一般生产环境都会配置长sql告警,可以根据业务情况调整告警阈值。

那么在postgresql数据库如果遇到了长sql告警我们应该怎么处理呢?我总结一下:一查二看三杀。

一查:

首先我们要定位到是哪条sql引起的告警。登录pg数据库查看pg_stat_activity(pgxc架构使用pgxc_stat_activity)视图,通过query_start字段查看sql的开始运行时间,state字段表明了当前sql的状态,一般有三种:active表示sql活跃正在执行;idle表示当前该连接空闲,上一条sql已经执行完毕,当前没有sql在执行;idle in transaction表示当前事务还未结束,事务中上一条sql已经执行完毕,当前事务没有sql在执行,事务中空闲。pg_stat_activity视图中还有个pid字段,这个字段是当前连接的进程/线程号,这个我们后面处理的依据。

二看:

二看执行计划,我们使用explain 命令查看当前sql的执行计划,确认sql执行计划是否正确,是否走到了索引,是否走到了正确的索引,如果没有走正确索引,我们可以对表进行分析,重新收集统计信息。如果想得到更精确的信息,可以使用explain performance命令来查看更详细的执行计划信息,值得注意的是explain不会真正执行sql,而explain performance会真正执行sql。

三杀:

在定位sql后,我们往往会跟业务确认这条sql是否能够杀掉,当业务确认后,我们就需要杀掉该sql。

pg数据库杀掉某条sql有三种方法,也可以称为三板斧:cancel->terminate->kill

①使用pg_cancel_backend(pid)杀掉某条sql,这个是温柔的杀,向后台发送sigint信号,关闭当前后台进程,用户只能关闭自己的后台进程,事务回滚。

②使用pg_terminate_backend(pid)杀掉某条sql,这个是强杀,向后台发送sigterm信号,关闭当前后台进程,需要有超级用户权限,超级用户可以关闭所有后台进程,事务回滚。

③这里为什么会有第三种杀法呢?可能大家遇到过,使用pg_cancel_backend杀不掉的进程,但是其实pg_terminate_backend有时也无法杀掉某条sql,笔者在生产环境遇到过,这时我们可能会抓一下该连接的堆栈,然后我们可能想尽快杀掉该sql,问题原因后面再分析,这时我们就要从操作系统层面使用kill命令来杀掉连接了。通过上面查到的pid,在操作系统上ps -ef |grep pid查看当前连接的状态,然后kill -9 pid杀掉该连接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# select pid,query_start,state,query from pg_stat_activity where state='active';
  pid  |          query_start          | state  |                                     query                                      
-------+-------------------------------+--------+--------------------------------------------------------------------------------
  5001 | 2019-08-13 12:45:16.652909+08 | active | select * from perf_analyse;
 18876 | 2019-08-13 12:45:19.019691+08 | active | select pid,query_start,state,query from pg_stat_activity where state='active';
(2 rows)

postgres=# \q
postgres@xxx:~> ps -ef |grep 5001
postgres  5001 23550 64 12:45 ?        00:00:13 postgres: postgres postgres [local] SELECT
postgres  7677  6228  0 12:45 pts/3    00:00:00 grep --color=auto 5001
postgres@xxx:~> kill -9 5001

上面三板斧在生产环境中还是建议从前到后执行,虽然第三种方法最直接有效,但是毕竟是生产环境,万一触发什么bug也不知道,所以迫不得已再使用。

好吧,加油吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MOP 系列|MOP 三种主流数据库常用 SQL(三)PG篇
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。第二篇 MySQL 常用 SQL详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(二)。
JiekeXu之路
2024/05/28
1490
MOP 系列|MOP 三种主流数据库常用 SQL(三)PG篇
Greenplum实时查询分析最佳实践
本文描述问题及解决方法同样适用于 腾讯云 云数据仓库 PostgreSQL(CDWPG)。
岳涛
2021/02/08
4.8K1
Greenplum实时查询分析最佳实践
全程干货!腾云忆想CSIG 产品架构师分享CDWPG云数仓库管理小窍门
腾讯云 云数据仓库 PostgreSQL(Cloud Data Warehouse PostgreSQL)(以下我们简称CDWPG)为企业提供简单、快速、经济高效的 PB 级云端数据仓库解决方案。云数据仓库兼容 Greenplum 开源数据仓库,是一种基于 MPP(大规模并行处理)架构的数仓服务。借助于该产品,可以使用丰富的 PostgreSQL 开源生态工具,实现对云数据仓库中海量数据的即席查询分析、ETL 处理及可视化探索;还可以借助云端数据无缝集成特性,轻松分析位于 COS、TencentDB、ES 等数据引擎上的 PB 级数据。
腾云忆想V
2021/08/31
1.8K1
PostgreSQL - 如何杀死被锁死的进程
在一次系统迭代后用户投诉说无法成功登陆系统,经过测试重现和日志定位,最后发现是由于用户在ui上进行了某些操作后,触发了堆栈溢出异常,导致数据库里的用户登陆信息表的数据被锁住,无法释放。这个表里存放的是用户的session信息。
雨临Lewis
2022/01/12
2.1K0
GreenPlum数据库日常维护
要保持一个Greenplum数据库系统高效运行,必须对数据库定期清理过期数据并且更新表统计信息, 这样查询优化器才能有准确的信息。
AiDBA宝典
2023/01/11
2.6K0
进阶数据库系列(八):PostgreSQL 锁机制
当多个会话同时访问数据库的同一数据时,理想状态是为所有会话提供高效的访问,同时还要维护严格的数据一致性。那数据一致性通过什么来维护呢,就是通过 MVCC(多版本并发控制) 。
民工哥
2023/08/22
2.5K0
进阶数据库系列(八):PostgreSQL 锁机制
PostgreSQL如何快速定位阻塞SQL
| 导语 数据库在执行过程中经常会遇到有SQL执行时间超长,互相阻塞的问题。如何快速找出罪魁祸首,并且干掉此类语句让流程继续,本文将简单为大家讲明。
腾讯云数据库 TencentDB
2021/12/31
2.9K0
PostgreSQL如何快速定位阻塞SQL
PostgreSQL 常用的命令
最近在学习PostgreSQL 技术体系,前面几篇文章介绍了 认识 PostgreSQL 基础权限体系,PostgreSQL 相关系统日志参数,今天学习一下常用的命令。
用户1278550
2022/04/01
9920
PostgreSQL 常用的命令
POSTGRESQL pg_stat_activity 一个表360度对PG的管理
pg_stat_activity 实际上对于PG 的管理是非常重要的,下面我们看看如何从多个角度来从pg_stat_activity 对PG 进行管理。
AustinDatabases
2021/03/16
1.3K0
POSTGRESQL  pg_stat_activity 一个表360度对PG的管理
进阶数据库系列(二十四):PostgreSQL 数据库日志与日常巡检
参考文章:https://blog.csdn.net/qq_33445829/article/ details/126578647 https://blog.csdn.net/qq_33445829 /article/details/126638945
民工哥
2023/08/22
1.4K0
进阶数据库系列(二十四):PostgreSQL 数据库日志与日常巡检
PG 数据库锁表问题解决方案:查询pg数据库锁表的语句和进程,通过进程pid杀掉进程进行批量表解锁
查询锁表语句和 pid: select pid, query from pg_stat_activity where datname='数据库名' and wait_event_type = 'Lock'; 可以看到那些执行 sql 语句的进程被锁了,卡住了。
小蓝枣
2021/12/01
4.2K0
PG 数据库锁表问题解决方案:查询pg数据库锁表的语句和进程,通过进程pid杀掉进程进行批量表解锁
深入了解 PostgreSQL:pg_blocking_pids函数的应用
PostgreSQL是一款强大而灵活的开源数据库管理系统,具有广泛的用户群体和活跃的社区。在 PostgreSQL 的众多特性中,有一项非常实用的函数是 pg_blocking_pids。本文将详细介绍这个函数的作用、使用示例以及总结说明,以便读者更好地理解和应用于实际开发中。
AiDBA宝典
2024/01/22
5410
深入了解 PostgreSQL:pg_blocking_pids函数的应用
PostgreSQL里面的一些命令小结
近两天总结了下PostgreSQL的基本操作命令,对PostgreSQL也有了一个基本的认识。 PostgreSQL的功能还是很丰富的,有序列,支持db link,基本Oracle里有的概念它这里也有,目前来看不支持package。 风格和Oracle也类似,没有MySQL中快捷方便的show create table 这样的语句。 从我的使用习惯来说,我基本关注以下的一些方面。 查看数据库的配置 查看用户信息 查看会话连接信息 show tables的类似方法 用户的权限查看 建表语句 表空间信息 对象
jeanron100
2018/03/30
8.1K0
PostgreSQL里面的一些命令小结
PostgreSQL 常用SQL语句
PostgreSQL 可以说是目前功能最强大、特性最丰富和结构最复杂的开源数据库管理系统,其中有些特性甚至连商业数据库都不具备。这个起源于加州大学伯克利分校的数据库,现已成为一项国际开发项目,并且拥有广泛的用户群,尤其是在海外,目前国内使用者也越来越多。
YP小站
2020/06/04
1.1K0
进阶数据库系列(二十六):PostgreSQL 数据库监控管理
在数据库集群中,有3个配置文件,分别是:postgresql.conf,pg_hba.conf和pg_ident.conf。其中postgresql.conf为服务器主要的配置文件,pg_hba.conf是客户端认证配置文件,pg_ident.conf用来配置哪些操作系统用户可以映射为数据库用户。
民工哥
2023/08/22
1.8K0
进阶数据库系列(二十六):PostgreSQL 数据库监控管理
原 PostgreSQL数据库操作查找原因以及解决建议
1、查看表是否有锁: select a.locktype,a.database,a.pid,a.mode,a.relation,b.relname from pg_locks a join pg_class b on a.relation = b.oid where upper(b.relname) = 'TABLE_NAME'; 2、根据上面查出的pid进行查找锁对应的SQL语句: select usename,current_query ,query_start,procpid,client
王果壳
2018/05/17
7470
从零开始学PostgreSQL (八):监控数据库动态
PostgreSQL 提供了一套丰富的统计信息收集和报告机制,用于监控数据库的运行状况和性能。以下是这些机制的一些关键要点:
DBA实战
2024/09/06
1430
从零开始学PostgreSQL (八):监控数据库动态
30个实用SQL语句,玩转PostgreSQL
PostgreSQL是一款功能非常强大的开源关系型数据库,它支持哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN等多种索引模式,同时可安装功能丰富的扩展包。相较于Mysql,PostgreSQ支持通过PostGIS扩展支持地理空间数据、支持嵌套循环,哈希连接,排序合并三种表连接方式等一系列的强化功能。本文主要整理总结了30个实用SQL,方便大家可以高效利用PostgreSQL。
慕枫技术笔记
2023/03/20
7510
30个实用SQL语句,玩转PostgreSQL
PostgreSQL修改数据库名
处理办法:因提示的是数据库正在被其他用户所使用,所以需要先关闭连接该库的会话即可。 关闭连接的方式在PostgreSQL9.2及以上版本可以直接通过以下方式处理:
俊才
2021/05/10
2.5K0
PostgreSQL修改最大连接数
在使用PostgreSQL的时候,经常会遇到这样的错误提示, sorry, too many clients already,这是因为默认PostgreSQL最大连接数是 100, 一般情况下,个人使用时足够的,但是在生产环境,这个连接数是远远不够的;
每周聚焦
2024/07/25
5360
PostgreSQL修改最大连接数
推荐阅读
相关推荐
MOP 系列|MOP 三种主流数据库常用 SQL(三)PG篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验