SELECT pid, now() - pg
stat
activity.query
start
AS duration, query, state
FROM pgstat
activity
WHERE (now() - pgstat
activity
.querystart) > interval '1 minute'
AND state = 'active';
SELECT bl.pid AS blocked
pid
, a.usename AS blockeduser, ka.query AS blocking
statement
,
now() - ka.querystart AS blocking
duration
, kl.pid AS blockingpid, ka.usename AS blocking
user
,
a.query AS blockedstatement
FROM pg
catalog
.pglocks bl
JOIN pg
catalog
.pgstat
activity
a ON a.pid = bl.pid
JOIN pgcatalog.pg
locks
kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
JOIN pgcatalog.pg
stat
activity ka ON ka.pid = kl.pid
WHERE NOT bl.granted;
EXPLAIN
or EXPLAIN ANALYZE
before your query to see the execution plan and where the query might be inefficient.EXPLAIN ANALYZE SELECT * FROM your
table
WHERE yourconditions;
SET statement_timeout = '10min';
SHOW work_mem;
SET work_mem = '256MB'; -- Adjust based on your server's capacity
SHOW max_connections;
SELECT pg_cancel_backend(pid);
SELECT pg_terminate_backend(pid);
(Perfect for DevOps & SREs)
(Perfect for DevOps & SREs)