postgresql中执行select查询语句卡住问题的处理

 1、问题描述

 

研发环境搭建的分布式的数据库Tbase。Tbase本质上是基于postgresql-xl创建的分布式数据库。

昨天,研发的同事反馈,这个数据库中,对某个表执行select查询的时候,都是卡住的。

客户端一直没有影响。

 

2、问题分析

 

我这边通过pg的客户端进行连接,发现除了这个表,其他的表都是可以正常的进行查询和返回数据的。

所以怀疑,仅仅是这个表被锁住了。

 

3、问题解决

 

  3.1 查看数据库中有哪些锁等待

 

有哪些阻塞的进程,等待的事件和具体的执行的sql语句

SELECT
    pg_blocking_pids ( pid ),
    pid,
    now( ) - xact_start,
    wait_event,
    wait_event_type,
    substr( query, 1, 100 ) 
FROM
    pg_stat_activity 
WHERE
    STATE <> 'idle' 
ORDER BY
    3 DESC;

 

通过查询结果,可以知道,有一条alter 修改这个表的名字的ddl语句

一直卡在那里,导致后面的select都是卡住的

 经过和研发确认,确实是执行了表名的修改的动作。

 

3.2 杀掉阻塞进程

 

找到了阻塞的进程,直接干掉

SELECT
    pg_terminate_backend ( 5927 );

括号里的5927是阻塞进程的ID。

 

这个进程被杀掉之后,查询的语句执行成功。

后面和研发沟通具体的修改表名的方法,以最小的影响业务的正常进行。

posted @ 2023-11-23 10:20  Zhai_David  阅读(736)  评论(0编辑  收藏  举报