我有时看到像这样的消息
进程12990等待数据库17607的关系17720的元组(889,66)上的ExclusiveLock; 被进程12992阻止.
当然,"过程"部分非常清楚,但我不知道如何关联关系ID和人类可读的名称.我也不知道如何制作元组位.
任何人都知道如何阅读这些消息以及如何从中收集有用的数据?
谢谢!
whi*_*537 28
"关系"是表,"元组"是一行.
这是从表id获取表名的一个很好的快捷方式(您也可以查询pg_class表):
=> select 17720::regclass;
????????????
? regclass ?
????????????
? my_table ?
????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)
那排怎么样?在"元组位"是一个元组标识符,并在数据库中的每个表都有一个特殊的系统列名为ctid其中这些标识符的存储位置.现在我们知道了有问题的表,我们可以这样做:
=> select * from my_table where ctid='(889,66)';
Run Code Online (Sandbox Code Playgroud)
然而!从系统列文档(强调添加):"[A]虽然ctid可以用来非常快速地定位行版本,但如果更新或由VACUUM FULL移动,行的ctid将会改变.因此ctid是无用的 - 行行标识符." 换句话说,如果你足够快,你可能会相信返回的行是死锁中涉及的行,但该信息将永远不可用.
Pet*_*ans 20
您可以查看系统表:这里感兴趣的是pg_class.
做一个像这样的查询
SELECT OID, relname FROM pg_class
oid | relname
-------+------------------------------------
1247 | pg_type
11550 | user_mapping_options
11554 | user_mappings
11494 | triggered_update_columns
11497 | triggers
Run Code Online (Sandbox Code Playgroud)
更确切地说
SELECT relname FROM pg_class WHERE OID=17720
Run Code Online (Sandbox Code Playgroud)
可能会对锁具有所了解.
| 归档时间: |
|
| 查看次数: |
15180 次 |
| 最近记录: |