在 CentOS 上监控 PostgreSQL 的状态,常见方式可以分为 系统级监控、数据库内置监控、日志监控、以及第三方工具。下面按实用程度给你梳理一套方案。
systemctl status postgresql
# 或指定版本
systemctl status postgresql-15
启动 / 停止 / 重启:
systemctl start postgresql
systemctl stop postgresql
systemctl restart postgresql
ss -lntp | grep postgres
# 或
netstat -lntp | grep 5432
ps -ef | grep postgres
su - postgres
psql
SELECT count(*) FROM pg_stat_activity;
SELECT pid, usename, application_name, client_addr, state, query
FROM pg_stat_activity;
\l+
-- 或
SELECT datname, pg_size_pretty(pg_database_size(datname))
FROM pg_database;
SELECT * FROM pg_stat_user_tables;
/var/lib/pgsql/15/data/log/
# 或
/var/log/postgresql/
实时查看:
tail -f /var/lib/pgsql/15/data/log/postgresql-*.log
建议开启:
log_connections = onlog_disconnections = onlog_min_duration_statement = 1000(慢查询)-- 等待事件
SELECT * FROM pg_stat_activity WHERE wait_event IS NOT NULL;
-- 锁等待
SELECT * FROM pg_locks WHERE NOT granted;
-- 数据库整体统计
SELECT * FROM pg_stat_database;
pg_isready -h 127.0.0.1 -p 5432
yum install pg_top
pg_top
#!/bin/bash
COUNT=$(psql -t -c "SELECT count(*) FROM pg_stat_activity;" | xargs)
echo "$(date) connections: $COUNT" >> /var/log/pg_monitor.log
加入 crontab:
* * * * * /root/pg_monitor.sh
如果你能告诉我:
我可以给你一套 更精确的监控方案或配置文件示例。