在不登录数据库的情况下查找挂起进程保持表锁定

时间:2017-05-05 19:31:10

标签: linux database postgresql centos6.5

tl; dr:有没有办法看到哪个进程持有表锁而无法登录数据库?

我有一台带有Postgres 8.4数据库的CentOS 6.5服务器。有相当多的crons运行维护sql脚本,它们通常运行良好,但偶尔会有一个进程挂起并阻塞其他进程,这将导致进程累积,直到达到postgres用户的进程限制并且数据库没有响应。

读取我的日志,我发现了一个阻止其他进程的进程,我甚至知道该进程运行的sql脚本的哪一行被卡住了:LOCK TABLE tablename IN ACCESS EXCLUSIVE MODE。锁表实际上永远不会发生,并且进程只是卡在那里,无法锁定表,这告诉我可能有另一个SQL脚本持有锁并且永远不会释放它。我想找到其他脚本并修复它。

问题是我无法登录到数据库进行查询,因为它没有响应,但如果我重新启动以使数据库可用,那么我就不会再看到被阻止的进程,所以我不会知道如何找出持有锁的进程,或者该进程正在运行的脚本......

0 个答案:

没有答案