温馨提示×

如何在Linux pgAdmin中监控数据库状态

小樊
48
2026-01-08 07:38:56
栏目: 智能运维

在 Linux 上使用 pgAdmin 监控 PostgreSQL 的实用步骤

一 快速上手 Dashboard 与内置监控

  • 在左侧对象树选择目标服务器或数据库,打开右侧 Dashboard,查看关键指标:Database sessions(会话数)Transactions per second(每秒事务)Tuples in/out(元组读写)Block I/O(块 I/O),用于快速判断负载与健康度。
  • 打开 Tools > Query Tool 执行 SQL,并使用 Explain / Explain Analyze 查看执行计划,定位慢查询与瓶颈。
  • 在对象树中右键库/表选择 Statistics,查看 Server StatisticsTable Statistics 等,跟踪查询量、缓存命中、索引/顺序扫描、行数变化等指标。
  • 在对象树的 Monitoring 节点可查看更细的实时性能数据(如 CPU、内存、磁盘 I/O 等),支持动态刷新。
  • 若左侧出现 Logs 节点,可查看数据库日志(需提前开启日志收集),用于故障排查与慢查询定位。

二 关键 SQL 检查清单(在 pgAdmin Query Tool 执行)

  • 连接与负载概览
    • 最大连接与当前连接:
      • show max_connections;
      • select count(*) from pg_stat_activity;
      • select count(*) from pg_stat_activity where state=‘active’;
    • 按库/用户/IP/应用统计连接:
      • select datname,count() from pg_stat_activity group by datname order by count() desc;
      • select usename,count() from pg_stat_activity group by usename order by count() desc;
      • select client_addr,count() from pg_stat_activity group by client_addr order by count() desc;
      • select application_name,count() from pg_stat_activity group by application_name order by count() desc;
  • 长事务与长连接
    • 超过 30 分钟 的长事务 TOP5:
      • select current_database(), pid,usename,query,state,xact_start,now()-xact_start xact_duration,query_start,now()-query_start as query_duration,backend_xid,backend_xmin from pg_stat_activity where EXTRACT(EPOCH FROM NOW()-xact_start)/60>30 and query !~ ‘^COPY$’ and pid<>pg_backend_pid() and state in (‘idle in transaction’,‘active’) and (backend_xid is not null or backend_xmin is not null) order by xact_duration desc limit 5;
    • 超过 30 分钟 的长连接 TOP5:
      • select current_database(),usename,pid,application_name,query,state,backend_start,now()-backend_start as backend_duration from pg_stat_activity where EXTRACT(EPOCH FROM NOW()-backend_start)/60>30 and pid<>pg_admin_pid() order by backend_duration desc limit 5;
  • 锁与阻塞
    • 查看阻塞与等待关系(按需扩展字段与条件):
      • select blocked_locks.pid as blocked_pid,blocked_activity.usename as blocked_user,blocking_locks.pid as blocking_pid,blocking_activity.usename as blocking_user,blocked_activity.query as blocked_statement,blocking_activity.query as current_statement_in_blocking_process,now()-blocking_activity.query_start as blocking_statement_duration,blocked_activity.state as blocked_state,blocking_activity.state as blocking_state from pg_catalog.pg_locks blocked_locks join pg_stat_activity blocked_activity on blocked_locks.pid=blocked_activity.pid join pg_catalog.pg_locks blocking_locks on blocking_locks.locktype=blocked_locks.locktype and blocking_locks.DATABASE=blocked_locks.DATABASE and blocking_locks.relation=blocked_locks.relation and blocking_locks.page=blocked_locks.page and blocking_locks.tuple=blocked_locks.tuple and blocking_locks.virtualxid=blocked_locks.virtualxid and blocking_locks.transactionid=blocked_locks.transactionid and blocking_locks.classid=blocked_locks.classid and blocking_locks.objid=blocked_locks.objid and blocking_locks.objsubid=blocked_locks.objobjsubid and blocking_locks.pid<>blocked_locks.pid join pg_stat_activity blocking_activity on blocking_locks.pid=blocking_activity.pid where not blocked_locks.granted;
  • 慢查询与 SQL 统计
    • 在 postgresql.conf 中开启:
      • logging_collector = on
      • log_min_duration_statement = 1000(单位毫秒,示例为记录超过 1 秒的语句)
    • 结合 pg_stat_statements 分析最耗时的 SQL(需创建扩展:create extension if not exists pg_stat_statements;)。

三 系统层面巡检与日志

  • 系统资源:使用 top/htop、vmstat、iostat、pidstat、dstat、sar、Glances 观察 CPU、内存、I/O、网络 与数据库/pgAdmin 进程资源占用,识别系统层瓶颈。
  • pgAdmin 应用自身健康:
    • 服务状态与日志:
      • systemctl status pgadmin4
      • journalctl -u pgadmin4 -f
    • 默认 Web 端口 5050,确认监听:ss -tulpen | grep 5050 或 netstat -tulpen | grep 5050
    • 日志路径:/var/log/pgadmin/pgadmin4.log,实时跟踪:tail -f /var/log/pgadmin/pgadmin4.log
    • Docker 场景:docker exec -it <容器名> sh、ps aux | grep pgadmin、tail -f /var/log/pgadmin/pgadmin4.log

四 长期监控与告警方案

  • 轻量组合:pgAdmin Dashboard + 系统工具(top/vmstat/iostat)+ PostgreSQL 内置视图,覆盖日常可用性、负载与 SQL 性能。
  • 生产组合:
    • Prometheus + Grafana(PostgreSQL Exporter):采集并可视化指标,配置阈值告警,形成可观测性闭环。
    • Zabbix(libzbxpgsql):企业级监控与告警。
  • 云数据库场景:除 pgAdmin 外,建议同时启用云厂商控制台的 实例监控(如 RDS for PostgreSQL 的监控指标),获取更完整的资源与性能视图。

五 常见排障与优化建议

  • 慢查询定位:在 Query Tool 使用 EXPLAIN / EXPLAIN ANALYZE 识别高成本算子(如顺序扫描)、缺失索引与统计信息过期。
  • 表与索引健康:在表对象 Statistics 观察 行数、索引大小、顺序/索引扫描比例,按需创建索引并执行 VACUUM / ANALYZE 保持性能。
  • 连接治理:对异常或长时间空闲的连接进行排查与清理(如基于 pg_stat_activity 的结果评估),避免连接风暴。
  • 锁与阻塞:利用 pg_stat_activity 与 pg_locks 联合分析阻塞链,优先处理持锁时间长的事务。

0