在 CentOS 上监控 PostgreSQL 数据库,可以从 系统层、数据库层、日志、第三方工具 几个维度来做。下面按常见实用方式给你梳理。
psql 查看状态psql -U postgres -c "SELECT version();"
psql -U postgres -c "SELECT now();"
查看连接数:
SELECT count(*) FROM pg_stat_activity;
查看慢查询:
SELECT * FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY query_start;
-- 表级统计
SELECT * FROM pg_stat_user_tables;
-- 索引使用
SELECT * FROM pg_stat_user_indexes;
-- 数据库整体
SELECT * FROM pg_stat_database;
路径一般为:
/var/lib/pgsql/<版本>/data/postgresql.conf
关键参数:
logging_collector = on
log_directory = 'log'
log_min_duration_statement = 1000 # 记录超过1秒的SQL
log_connections = on
log_disconnections = on
log_line_prefix = '%t %u %d %p'
重启:
systemctl restart postgresql
tail -f /var/lib/pgsql/<版本>/data/log/*.log
ps aux | grep postgres
top
htop
ss -lntp | grep 5432
df -h
iostat -x 1
CREATE EXTENSION pg_stat_statements;
shared_preload_libraries = 'pg_stat_statements'
重启后查看:
SELECT query, calls, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
postgres_exporterSELECT * FROM pg_stat_replication;
#!/bin/bash
psql -U postgres -c "SELECT count(*) FROM pg_stat_activity;"
psql -U postgres -c "SELECT datname, blks_read, blks_hit FROM pg_stat_database;"
如果你能告诉我:
我可以给你一套 更精准的监控方案或脚本。