在 Linux 上使用 pgAdmin 查 PostgreSQL 慢查询,一般可以从下面几个层面来做(pgAdmin 本身 + PostgreSQL 配置)。
pgAdmin 只能“看”,慢查询需要 PostgreSQL 先记录。
路径通常在:
/var/lib/postgresql/<版本>/main/postgresql.conf
或
/etc/postgresql/<版本>/main/postgresql.conf
修改以下参数:
logging_collector = on
log_directory = 'log'
log_min_duration_statement = 1000 # 超过 1 秒的 SQL 记日志
log_statement = 'none'
log_line_prefix = '%t %p %u %d %a '
单位:毫秒(1000 = 1 秒)
sudo systemctl restart postgresql
ls /var/log/postgresql/
tail -f /var/log/postgresql/postgresql-*.log
pgAdmin 不能直接分析日志文件,但你可以把日志下载下来看。
SELECT
pid,
now() - query_start AS duration,
state,
query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY duration DESC;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
shared_preload_libraries = 'pg_stat_statements'
重启数据库。
SELECT
query,
calls,
total_exec_time,
mean_exec_time,
max_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;
生产环境最佳实践:
log_min_duration_statement 开慢日志pg_stat_statementspg_stat_statements如果你愿意,可以告诉我:
我可以给你更精确的配置。