分析正在执行的SQL 查看处于阻塞状态的语句 查看当前处于阻塞状态的查询语句: SELECT pid, datname, usename, state, query FROM PGSTATACTIVITY WHERE state <> 'idle' and waitingtrue; 执行以下语句结束到阻塞的SQL会话。 SELECT PGTERMINATEBACKEND(pid); 说明 l 大部分场景下,阻塞是因为系统内部锁而导致的,waiting字段才显示为true,此阻塞可在视图pgstatactivity中体现。 l 在一些少数场景下,例如写文件、定时器等情况的查询阻塞,不会在视图pgstatactivity中体现。 查看阻塞的查询语句及阻塞查询的表、模式信息 SELECT w.query as waitingquery, w.pid as wpid, w.usename as wuser, l.query as lockingquery, l.pid as lpid, l.usename as luser, t.schemaname '.' t.relname as tablename from pgstatactivity w join pglocks l1 on w.pid l1.pid and not l1.granted join pglocks l2 on l1.relation l2.relation and l2.granted join pgstatactivity l on l2.pid l.pid join pgstatusertables t on l1.relation t.relid where w.waiting; 该查询返回会话ID、用户信息、查询状态,以及导致阻塞的表、模式信息。 查询到阻塞的表及模式信息后请根据会话ID结束会话。 SELECT PGTERMINATEBACKEND(pid); 显示类似如下信息,表示结束会话成功。 PGTERMINATEBACKEND t (1 row) 显示类似如下信息,表示用户正在尝试结束当前会话,此时仅会重连会话,而不是结束会话。 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded. 说明 gsql客户端使用PGTERMINATEBACKEND函数终止本会话后台线程时,客户端不会退出而是自动重连。