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。
这个进程被杀掉之后,查询的语句执行成功。
后面和研发沟通具体的修改表名的方法,以最小的影响业务的正常进行。