一、性能调优概述
1.1 性能优化层次
1.2 性能问题诊断流程
-- 1. 检查系统整体状态
SELECT
numbackends AS connections,
xact_commit AS commits,
xact_rollback AS rollbacks,
blks_read AS disk_reads,
blks_hit AS cache_hits,
round(100.0 * blks_hit / NULLIF(blks_read + blks_hit, 0), 2) AS cache_hit_ratio,
tup_returned AS rows_returned,
tup_fetched AS rows_fetched,
tup_inserted AS rows_inserted,
tup_updated AS rows_updated,
tup_deleted AS rows_deleted
FROM pg_stat_database
WHERE datname = current_database();
-- 2. 检查活动连接
SELECT
state,
COUNT(*) AS count,
MAX(NOW() - query_start) AS max_duration
FROM pg_stat_activity
GROUP BY state;
-- 3. 检查慢查询
SELECT
pid,
NOW() - query_start AS duration,
query,
state
FROM pg_stat_activity
WHERE state != 'idle'
AND query_start < NOW() - INTERVAL '5 seconds'
ORDER BY duration DESC;
-- 4. 检查锁等待
SELECT
blocked.pid AS blocked_pid,
blocked.query AS blocked_query,
blocking.pid AS blocking_pid,
blocking.query AS blocking_query
FROM pg_stat_activity blocked
JOIN pg_locks blocked_locks ON blocked.pid = blocked_locks.pid
JOIN pg_locks blocking_locks ON
blocked_locks.locktype = blocking_locks.locktype
AND blocked_locks.relation = blocking_locks.relation
AND blocked_locks.pid != blocking_locks.pid
JOIN pg_stat_activity blocking ON blocking_locks.pid = blocking.pid
WHERE NOT blocked_locks.granted;
2026/3/20大约 16 分钟