测量 PostgreSQL 等待锁的时间

Tim*_* He 1 postgresql performance concurrency metadata locking

我想弄清楚PostgreSQL在一段时间内等待锁所花费的时间(在这段时间内,PostgreSQL服务了很多请求)。

我知道的

PostgreSQL 系统表pg_locks显示一些信息。喜欢:

SELECT * FROM 
    pg_locks         pl   LEFT JOIN 
    pg_stat_activity psa
ON pl.pid = psa.pid;
Run Code Online (Sandbox Code Playgroud)

但是我仍然无法弄清楚它在锁上花费了多长时间。

为什么我问这个问题

我发现当我增加 PostgreSQL 的并发性时(例如,增加每个收集的并行工作线程数、最大并行工作线程数或其他一些配置),我的 100 秒多线程 TPC-C-like 工作负载变得更慢(即,更低的吞吐量)。所以我想弄清楚这是否是因为争用过多。

类似的答案

对于 SQL Server:如何在没有分析器的情况下查看查询花费了多长时间等待锁定?

Lau*_*lbe 5

您可以启用log_lock_waits以获取有关等待时间超过deadlock_timeout锁定时间的会话的信息。您可以减少deadlock_timeout以查看更短的等待时间。

除此之外,监视wait_event_typewait_eventin pg_stat_activity。如果您经常看到锁,那可能是个问题。