postgreSQL中的virtualxid, transactionid, virtualtransaction

    在postgreSQL中,描述事务ID的字段有三个:virtualxid, transactionid, virtualtransaction。它们的含义分别如下:

名称 含义
virtualxid 虚拟事务ID。如果对象虚拟事务,则此值为null。
transactionid 事务ID。如果对象不是事务,则此值为mull。
virtualtransaction 持有或等待这把锁的虚拟事务的ID。

    “transactionid”表示事务ID,“virtualxid”表示虚拟事务ID。每产生一个事务ID,都会在commit log文件中占用2bit。但有些事务没有产生任何实质的变更,比如只读事务或空事务,给它们也分配一个事务ID就很浪费。因此,对这类没有实质变更的事务,只分配虚拟事务ID,不分配事务ID,不占用2bit的空间。

    “virtualxid”和“virtualtransaction”从字面上看都是虚拟事务ID的意思。它们的区别是:位于pg_locks视图的不同部分,“virtualxid” 位于描述锁对象的部分, “virtualtransaction”位于描述持有锁或等待锁的部分。因此,“virtualxid” 表示这个锁对象是一个虚拟事务,而“virtualtransaction”表示持有锁或等待锁的虚拟事务ID。

 

你可能感兴趣的:(PostgreSQL)