Proposal: expose heavyweight lock wait start time in pg_stat_activity

From: Alex Shapalov <shapalov(at)gmail(dot)com>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Proposal: expose heavyweight lock wait start time in pg_stat_activity
Date: 2026-09-21 22:16:54
Message-ID: CAPrb+QJzYqjEB5yVehUB1qh4_gaEYVrV4weRi+w-3rHBvwgq5w@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

I'd like to propose exposing the start time of the current heavyweight lock
wait in pg_stat_activity, perhaps as:

*lock_wait_start timestamptz
*

pg_stat_activity currently tells us that a backend is waiting on a lock
through wait_event_type and wait_event, but not when that wait started.

For example:

*SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE wait_event_type = 'Lock';
*

might show:

*pid state wait_event_type wait_event
8123 active Lock transactionid
*

We know PID 8123 is blocked, but not whether it has been waiting for 50 ms
or 15 minutes.

The timestamp already exists in PGPROC.waitStart and is exposed as
pg_locks.waitstart.

A similar idea was discussed in 2016, when the concern was the cost of
acquiring a timestamp for every wait event. For heavyweight locks, that
concern should no longer apply. Since commit 46d6e5f5, PostgreSQL already
records the timestamp using the deadlock-timeout timing infrastructure:

https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=46d6e5f5

pg_stat_get_activity() already has the backend's PGPROC available and reads
wait_event_info from it, so exposing waitStart would require only another
atomic read and no new timing instrumentation.

I suggest the name lock_wait_start to make it clear that this applies only
to heavyweight lock waits.

This could allow:

*SELECT pid,
wait_event,
lock_wait_start,
now() - lock_wait_start AS waiting_for
FROM pg_stat_activity
WHERE wait_event_type = 'Lock';
*

Before preparing a patch, does exposing this directly in pg_stat_activity
seem reasonable?

If widening pg_stat_activity is undesirable, would a function such as
pg_stat_get_backend_lock_wait_start(pid) be preferable?

Thanks,
Alex Shapalov

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bryan Green 2026-09-21 22:28:58 Re: [PATCH] unrecognized win32 error 448 (ERROR_UNTRUSTED_MOUNT_POINT) breaks tablespaces on Win11 26200
Previous Message Tristan Partin 2026-09-21 22:01:12 Re: Validate user-supplied c_args in meson builds