
# 分析作业是否被阻塞
数据库系统运行时，在某些业务场景下查询语句会被阻塞，导致语句运行时间过长，可以强制结束有问题的会话。
#### 操作步骤
1. 查看阻塞的查询语句及阻塞查询的表、模式信息。 
   ```
   SELECT w.query as waiting_query,
   w.coorname as w_cn,
   w.pid as w_pid,
   w.usename as w_user,
   l.query as locking_query,
   l.pid as l_pid,
   l.usename as l_user,
   t.schemaname || '.' || t.relname as tablename
   from pgxc_stat_activity w join pg_locks l1 on w.pid = l1.pid
   and not l1.granted join pg_locks l2 on l1.relation = l2.relation
   and l2.granted join pgxc_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid
   where w.waiting;
   ```
   该查询返回线程ID、CN名称、用户信息、查询状态，以及导致阻塞的表、模式信息。
   
   
2. 使用如下命令结束相应的会话。其中，w_cn、w_pid分别为上面查到的对应CN名称、线程ID。 
   ```
   EXECUTE DIRECT ON(w_cn) 'SELECT pg_terminate_backend(w_pid)';
   ```
   显示类似如下信息，表示结束会话成功。
   ```
   PG_TERMINATE_BACKEND
   ----------------------
    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.
   ```
   ![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
   gsql客户端使用PG_TERMINATE_BACKEND函数终止本会话后台线程时，客户端不会退出而是自动重连。
   
   
 
