TX 和 XID 分数在 postgres pgadmin 工具中代表什么

Nay*_*nbo 2 database postgresql pgadmin

XID 和 TX 列中的分数代表什么。这是 postgres 的 pgadmin 工具的屏幕截图。

我知道 TX 和 XID 分别表示交易和交易 ID,但是我不明白分数表示法的含义。

在此处输入图片说明

Cra*_*ger 6

虚拟交易 ID 具有“n/nnnn”格式。真正的 XID 只是整数。虚拟 xid 的第一部分是每个连接唯一的后端标识符;第二部分是该连接的后端为其事务分配的临时事务 ID。

有关详细信息,请参阅VirtualTransactionIdin的定义src/include/storage/lock.h


这些列似乎对应于 virtualxid和/或transactionid和 中的virtualtransactionpg_locks。请参阅文档

如果我是对的,那么:

  • “TX”是持有或等待锁定的交易的虚拟交易 ID。
  • “XID”是等待事务所针对的事务的虚拟事务 ID,如果目标是虚拟 xid。在 PgAdmin 中,如果目标是正常的 xid,它也可能会显示目标的 xid。

虚拟事务 ID 是 PostgreSQL 在事务开始时分配给每个事务的临时的、瞬态的事务 ID。它们没有记录在磁盘上。仅当事务执行需要事务性写入磁盘的操作时才会分配真正的 xid。

根据链接的手册:

每个事务在其整个持续时间内都对其虚拟事务 ID 持有独占锁。如果为事务分配了一个永久 ID(通常只有在事务更改数据库状态时才会发生),它还会对其永久事务 ID 持有排他锁,直到它结束。当一个事务发现有必要专门等待另一个事务时,它会尝试获取另一个事务 ID(虚拟或永久 ID,视情况而定)的共享锁。只有当另一个事务终止并释放其锁时,这才会成功。