我想检查Postgres和ORACLE的系统表中是否清除了死锁。
请建议我如何检查死锁状态。
答案 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
在这两种情况下,虽然您需要花一点时间来确定您之后实际发生的事情,因为锁定通常不会立刻保留在整个桌面上,因此很可能是不同的部分该表将通过不同的事务同时锁定它们。此外,它不仅仅会显示在这些视图中。
类似地,不同的锁类型(共享,独占等)将阻止不同类型的并发活动。