Thread: pg_locks - what is a virtualxid locktype

pg_locks - what is a virtualxid locktype

From
Mariel Cherkassky
Date:
Hey,
I noticed that pg_locks has an addition row for every transaction that is created with a locktype "virtualxid". Tried to search it online but I didnt find an explanation for this behavior. Does anyone can explain why it happens ?

Re: pg_locks - what is a virtualxid locktype

From
Shreeyansh Dba
Date:
The virtualxid lock is special. It’s a exclusive lock on the transaction’s own virtual transaction ID that every transaction always holds. No other transaction can ever acquire it while the transaction is running. 
The purpose of this is to allow one transaction to wait until another transaction commits or rolls back using PostgreSQL’s locking mechanism, and it’s used internally.

Thanks & Regards,
Shreeyansh DBA Team
www.shreeyansh.com


On Tue, Jan 29, 2019 at 2:27 PM Mariel Cherkassky <mariel.cherkassky@gmail.com> wrote:
Hey,
I noticed that pg_locks has an addition row for every transaction that is created with a locktype "virtualxid". Tried to search it online but I didnt find an explanation for this behavior. Does anyone can explain why it happens ?

Re: pg_locks - what is a virtualxid locktype

From
Shreeyansh Dba
Date:
The virtualxid lock is special. It’s a exclusive lock on the transaction’s own virtual transaction ID that every transaction always holds. No other transaction can ever acquire it while the transaction is running. 
The purpose of this is to allow one transaction to wait until another transaction commits or rolls back using PostgreSQL’s locking mechanism, and it’s used internally.

Thanks & Regards,
Shreeyansh DBA Team
www.shreeyansh.com


On Tue, Jan 29, 2019 at 2:27 PM Mariel Cherkassky <mariel.cherkassky@gmail.com> wrote:
Hey,
I noticed that pg_locks has an addition row for every transaction that is created with a locktype "virtualxid". Tried to search it online but I didnt find an explanation for this behavior. Does anyone can explain why it happens ?

Re: pg_locks - what is a virtualxid locktype

From
Alvaro Herrera
Date:
On 2019-Jan-29, Shreeyansh Dba wrote:

> The virtualxid lock is special. It’s a exclusive lock on the transaction’s
> own virtual transaction ID that every transaction always holds. No other
> transaction can ever acquire it while the transaction is running.
> The purpose of this is to allow one transaction to wait until another
> transaction commits or rolls back using PostgreSQL’s locking mechanism, and
> it’s used internally.

A little more specific than that: it's used when some process (such as
CREATE INDEX CONCURRENTLY) needs to wait even on sessions that might be
read-only.  Such transactions don't have transaction-ids that write
transactions have, which is why the only way is to wait on the virtual
transaction-id.


-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Re: pg_locks - what is a virtualxid locktype

From
Alvaro Herrera
Date:
On 2019-Jan-29, Shreeyansh Dba wrote:

> The virtualxid lock is special. It’s a exclusive lock on the transaction’s
> own virtual transaction ID that every transaction always holds. No other
> transaction can ever acquire it while the transaction is running.
> The purpose of this is to allow one transaction to wait until another
> transaction commits or rolls back using PostgreSQL’s locking mechanism, and
> it’s used internally.

A little more specific than that: it's used when some process (such as
CREATE INDEX CONCURRENTLY) needs to wait even on sessions that might be
read-only.  Such transactions don't have transaction-ids that write
transactions have, which is why the only way is to wait on the virtual
transaction-id.


-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services