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。
這個進程被殺掉之後,查詢的語句執行成功。
後面和研發溝通具體的修改表名的方法,以最小的影響業務的正常進行。