1.使用查询统计空闲事务及其 SQL
SELECT pid, usename, client_addr, application_name, state, query, now() - query_start AS duration, pg_blocking_pids(pid) AS blocking_pids FROM pg_stat_activity WHERE state = 'idle in transaction' AND (now() - query_start) > interval '5 seconds' ORDER BY duration DESC;
2.事务执行超过5min
select pid, state,wait_event,wait_event_type,usename, EXTRACT(EPOCH FROM (now()-query_start)), substr(query, 0, 1500) from pg_stat_activity where state != 'idle' and EXTRACT(EPOCH FROM (now()-xact_start)) > 300;