查询以检查postgres中表的死锁状态

时间:2017-10-12 07:01:25

标签: oracle postgresql deadlock database-deadlocks

我想检查Postgres和ORACLE的系统表中是否清除了死锁。

请建议我如何检查死锁状态。

1 个答案:

答案 0 :(得分:0)

死锁不会徘徊,一旦Postgres或Oracle发现死锁,它就会中止其中一个交易。这是因为就其本质而言,僵局在没有干预的情况下不会取得进展。

您可以做的是查看系统中存在的正常锁定以及它们已存在多长时间。

长时间持有的锁可能表示交易速度缓慢,或者代码没有在正确的地方提交等。

长期锁定也会增加将来发生僵局的可能性。

<强>的Postgres

您可以通过pg_locks视图执行此操作。

Postgresql wiki有一个关于在https://wiki.postgresql.org/wiki/Lock_Monitoring

处查看锁定的页面

pg_locks视图在https://www.postgresql.org/docs/current/static/view-pg-locks.html

中描述

<强>的Oracle

Oracle还提供了显示当前锁的视图,但它们使用起来有点复杂。

http://www.dba-oracle.com/t_grid_rac_db_locks_latches.htm

提供介绍

参考https://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_2027.htm#REFRN30121

在这两种情况下,虽然您需要花一点时间来确定您之后实际发生的事情,因为锁定通常不会立刻保留在整个桌面上,因此很可能是不同的部分该表将通过不同的事务同时锁定它们。此外,它不仅仅会显示在这些视图中。

类似地,不同的锁类型(共享,独占等)将阻止不同类型的并发活动。