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。

 

這個進程被殺掉之後,查詢的語句執行成功。

後面和研發溝通具體的修改表名的方法,以最小的影響業務的正常進行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章