1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG018-PG基础监控:查看数据库运行状态

本文档风哥主要介绍PostgreSQL教程018相关内容。风哥教程参考PostgreSQL官方文档Server Administration, SQL Language内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

内容简介:本文介绍PostgreSQL数据库的基础监控方法,包括系统视图、监控命令和实际操作案例。风哥教程参考PostgreSQL官方文档Monitoring Database Activity、Server Administration等内容,通过实际操作演示如何查看数据库的运行状态、连接信息、性能指标和存储使用情况,帮助读者掌握PostgreSQL基础监控的核心技能。

Part01-基础概念与理论知识

1.1 PostgreSQL监控概念

PostgreSQL监控是指对数据库的运行状态、性能指标、资源使用情况等进行实时或定期的采集、分析和告警,以确保数据库系统的稳定性、可靠性和性能。监控是数据库运维的重要组成部分,有助于及时发现和解决问题,预防系统故障。更多视频教程www.fgedu.net.cn

1.2 PostgreSQL监控指标

PostgreSQL监控指标主要包括:

  • 连接指标:连接数、活跃连接数、空闲连接数
  • 性能指标:查询响应时间、事务吞吐量、锁等待
  • 资源使用指标:CPU使用率、内存使用率、磁盘I/O
  • 存储指标:表大小、索引大小、表空间使用情况
  • 错误指标:错误日志、警告信息、异常事件

1.3 PostgreSQL监控工具

PostgreSQL提供了多种监控工具,包括:

  • 内置系统视图:pg_stat_*, pg_stat_activity, pg_stat_fgedudb等
  • 命令行工具:psql, pg_top, pg_stat_monitor等
  • 第三方监控工具:Prometheus + Grafana, Zabbix, Nagios等

Part02-生产环境规划与建议

2.1 PostgreSQL监控策略

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 建立全面的监控体系,覆盖数据库的各个层面
– 结合主动监控和被动监控,及时发现和解决问题
– 使用分层监控策略,从操作系统到数据库内部
– 建立监控基线,识别异常情况
– 定期审查监控策略,根据业务需求调整

2.2 PostgreSQL监控频率

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 实时监控:连接数、活跃查询、锁等待等关键指标
– 分钟级监控:CPU、内存、磁盘I/O等资源使用情况
– 小时级监控:表空间使用、索引大小等存储指标
– 日级监控:慢查询日志、性能趋势分析

2.3 PostgreSQL监控告警

风哥教程针对风哥教程针对风哥教程针对生产环境建议:
– 设置合理的告警阈值,避免过多的误报
– 建立多级告警机制,根据问题严重程度采取不同措施
– 告警信息要包含足够的上下文,便于快速定位问题
– 定期测试告警机制,确保其有效性
– 建立告警响应流程,明确责任人和处理步骤

Part03-生产环境项目实施方案

3.1 PostgreSQL系统视图

PostgreSQL提供了丰富的系统视图,用于监控数据库的运行状态。

$ psql -d fgedudb -U fgedu
Password for fgedu fgedu:
psql (18.3)
Type “help” for help.

fgedudb=>

— 查看所有监控相关的系统视图
SELECT schemaname, viewname
FROM pg_views
WHERE schemaname = ‘pg_catalog’ AND viewname LIKE ‘pg_stat%’
ORDER BY viewname;
schemaname | viewname
————+——————————–
pg_catalog | pg_stat_activity
pg_catalog | pg_stat_all_indexes
pg_catalog | pg_stat_all_tables
pg_catalog | pg_stat_archiver
pg_catalog | pg_stat_bgwriter
pg_catalog | pg_stat_fgedudb
pg_catalog | pg_stat_fgedudb_conflicts
pg_catalog | pg_stat_gssapi
pg_catalog | pg_stat_progress_analyze
pg_catalog | pg_stat_progress_basebackup
pg_catalog | pg_stat_progress_cluster
pg_catalog | pg_stat_progress_create_index
pg_catalog | pg_stat_progress_vacuum
pg_catalog | pg_stat_replication
pg_catalog | pg_stat_replication_slots
pg_catalog | pg_stat_ssl
pg_catalog | pg_stat_subscription
pg_catalog | pg_stat_subscription_stats
pg_catalog | pg_stat_sys_indexes
pg_catalog | pg_stat_sys_tables
pg_catalog | pg_stat_fgedu_functions
pg_catalog | pg_stat_fgedu_indexes
pg_catalog | pg_stat_fgedu_tables
pg_catalog | pg_stat_wal_receiver
pg_catalog | pg_stat_xact_all_tables
pg_catalog | pg_stat_xact_sys_tables
pg_catalog | pg_stat_xact_fgedu_functions
pg_catalog | pg_stat_xact_fgedu_tables
(27 rows)

3.2 PostgreSQL监控命令

psql提供了一些内置命令,用于快速查看数据库状态。

— 查看数据库连接信息
\l
List of fgedudbs
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+———+———————–
fgedudb | pgsql | UTF8 | C.UTF-8 | C.UTF-8 |
pgsql | pgsql | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | pgsql | UTF8 | C.UTF-8 | C.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql template1 | pgsql | UTF8 | C.UTF-8 | C.UTF-8 | =c/pgsql +
| | | | | postgres=CTc/pgsql (4 rows)

— 查看当前连接
\c
You are connected to fgedudb “fgedudb” as fgedu “fgedu”.

— 查看数据库活动
\x
Expanded display is on.

— 查看表空间
\db
List of fgedutbss
Name | Owner | Location
————+———-+———-
pg_default | pgsql |
pg_global | pgsql |
(2 rows)

— 查看服务器状态
\conninfo
You are connected to fgedudb “fgedudb” as fgedu “fgedu” via socket in “/var/run/postgresql” at port “5432”.

3.3 操作系统层面监控

除了数据库内部监控,还需要从操作系统层面监控PostgreSQL的资源使用情况。学习交流加群风哥微信: itpux-com

# 查看PostgreSQL进程
$ ps aux | grep pgsql | grep -v grep
pgsql 1234 0.0 0.1 123456 7890 ? Ss 10:00 0:00 /usr/lib/postgresql/18/bin/pgsql -D /var/lib/postgresql/18/main
pgsql 1235 0.0 0.0 123456 3456 ? Ss 10:00 0:00 pgsql: checkpointer
pgsql 1236 0.0 0.0 123456 4567 ? Ss 10:00 0:00 pgsql: background writer
pgsql 1237 0.0 0.0 123456 5678 ? Ss 10:00 0:00 pgsql: walwriter
pgsql 1238 0.0 0.0 123456 6789 ? Ss 10:00 0:00 pgsql: autovacuum launcher
pgsql 1239 0.0 0.0 123456 7890 ? Ss 10:00 0:00 pgsql: stats collector
pgsql 1240 0.0 0.0 123456 8901 ? Ss 10:00 0:00 pgsql: logical replication launcher
pgsql 1241 0.0 0.1 123456 9012 ? Ss 10:00 0:00 pgsql: fgedu fgedudb [local] idle

# 查看PostgreSQL端口占用
$ netstat -tulpn | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1234/pgsql tcp6 0 0 :::5432 :::* LISTEN 1234/pgsql # 查看PostgreSQL资源使用
$ top -p 1234
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 pgsql 20 0 123456 7890 3456 S 0.0 0.1 0:00.01 pgsql

Part04-生产案例与实战讲解

4.1 PostgreSQL连接监控

监控数据库连接是PostgreSQL监控的重要内容,可以帮助发现连接泄漏和性能问题。

— 查看当前连接数
SELECT count(*) AS total_connections FROM pg_stat_activity;
total_connections
——————-
5
(1 row)

— 查看连接状态分布
SELECT state, count(*) AS count FROM pg_stat_activity GROUP BY state;
state | count
——–+——-
active | 1
idle | 4
(2 rows)

— 查看活跃连接的详细信息
SELECT
pid,
usename,
datname,
fgapplication_name,
client_addr,
client_port,
backend_start,
query_start,
state,
query
FROM pg_stat_activity WHERE state = ‘active’;
pid | usename | datname | fgapplication_name | client_addr | client_port | backend_start | query_start | state | query
——+———+———-+——————+————-+————-+——————————-+——————————-+——–+———————————————-
1241 | fgedu | fgedudb | psql | | -1 | 2026-04-02 11:30:45.123456+08 | 2026-04-02 11:35:20.789012+08 | active | SELECT \n pid,\n usename,\n datname,\n fgapplication_name,\n client_addr,\n client_port,\n backend_start,\n query_start,\n state,\n query\nFROM pg_stat_activity WHERE state = ‘active’;
(1 row)

— 查看连接数最多的用户
SELECT usename, count(*) AS count FROM pg_stat_activity GROUP BY usename ORDER BY count DESC;
usename | count
———-+——-
fgedu | 3
pgsql | 2
(2 rows)

4.2 PostgreSQL性能监控

性能监控是PostgreSQL监控的核心,可以帮助发现和解决性能问题。

— 查看数据库性能统计
SELECT
datname,
numbackends,
xact_commit,
xact_rollback,
blks_read,
blks_hit,
tup_returned,
tup_fetched,
tup_inserted,
tup_updated,
tup_deleted
FROM pg_stat_fgedudb WHERE datname = ‘fgedudb’;
datname | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted
———-+————-+————-+—————+———–+———-+————–+————-+————–+————-+————-+
fgedudb | 3 | 50 | 2 | 120 | 1500 | 3000 | 2800 | 100 | 5 | 2
(1 row)

— 计算缓存命中率
SELECT
datname,
round((blks_hit * 100.0) / (blks_read + blks_hit), 2) AS cache_hit_ratio
FROM pg_stat_fgedudb WHERE datname = ‘fgedudb’;
cache_hit_ratio
—————-+
92.59
(1 row)

— 查看表的读写统计
SELECT
relname,
seq_scan,
seq_tup_read,
idx_scan,
idx_tup_fetch,
n_tup_ins,
n_tup_upd,
n_tup_del
FROM pg_stat_fgedu_tables WHERE relname = ‘fgedu_products’;
relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del
—————–+———-+————–+———-+—————+———–+———–+———–
fgedu_products | 5 | 15 | 2 | 4 | 3 | 1 | 0
(1 row)

— 查看慢查询
— 首先需要在postgresql.conf中开启慢查询日志
— log_min_duration_statement = 1000 # 记录执行时间超过1秒的查询

— 查看当前正在执行的长时间运行查询
SELECT
pid,
usename,
datname,
query_start,
now() – query_start AS duration,
query
FROM pg_stat_activity
WHERE state = ‘active’ AND now() – query_start > interval ‘5 seconds’;
pid | usename | datname | query_start | duration | query
—–+———+———+————-+———-+——-
(0 rows)

4.3 PostgreSQL存储监控

存储监控可以帮助发现存储瓶颈和空间不足问题。学习交流加群风哥QQ113257174

— 查看表空间使用情况
SELECT
spcname AS fgedutbs_name,
pg_size_pretty(pg_fgedutbs_size(spcname)) AS size
FROM pg_fgedutbs;
fgedutbs_name | size
—————–+——–
pg_default | 128 MB
pg_global | 64 MB
(2 rows)

— 查看数据库大小
SELECT
datname,
pg_size_pretty(pg_fgedudb_size(datname)) AS size
FROM pg_fgedudb;
datname | size
———–+———+
pgsql | 128 MB
template1 | 128 MB
template0 | 128 MB
fgedudb | 160 MB
(4 rows)

— 查看表大小(包括索引)
SELECT
relname,
pg_size_pretty(pg_total_relation_size(relname)) AS total_size,
pg_size_pretty(pg_relation_size(relname)) AS table_size,
pg_size_pretty(pg_indexes_size(relname)) AS index_size
FROM pg_stat_fgedu_tables;
relname | total_size | table_size | index_size
—————–+————+————+————
fgedu_fgedus | 16 kB | 8192 bytes | 8192 bytes
fgedu_orders | 16 kB | 8192 bytes | 8192 bytes
fgedu_products | 16 kB | 8192 bytes | 8192 bytes
(3 rows)

— 查看索引大小
SELECT
indexrelname,
pg_size_pretty(pg_relation_size(indexrelname)) AS size
FROM pg_stat_fgedu_indexes;
indexrelname | size
———————-+———+
fgedu_fgedus_pkey | 8192 bytes
fgedu_fgedus_email_key | 8192 bytes
fgedu_fgedus_fgeduname_key | 8192 bytes
fgedu_orders_pkey | 8192 bytes
fgedu_products_pkey | 8192 bytes
(5 rows)

Part05-风哥经验总结与分享

风哥提示:PostgreSQL监控是数据库运维的重要组成部分,建立完善的监控体系可以帮助及时发现和解决问题,提高系统的稳定性和可靠性。监控应该覆盖数据库的各个层面,从操作系统到数据库内部,从连接数到性能指标,从存储使用到错误日志。

1. 监控是预防问题的重要手段,不要等到问题发生才进行监控,应该建立持续的监控体系。

2. 选择合适的监控指标,重点关注对业务影响较大的指标,如连接数、查询响应时间、缓存命中率等。

3. 建立合理的告警机制,设置合适的阈值,避免过多的误报,确保告警信息的有效性。

4. 定期分析监控数据,识别性能趋势和潜在问题,及时进行优化和调整。

5. 结合多种监控工具,从不同角度监控数据库,获取全面的运行状态信息。更多学习教程公众号风哥教程itpux_com

6. 建立监控文档,记录监控指标、告警阈值、处理流程等,便于团队协作和知识传承。

from oracle:www.itpux.com

7. 定期测试监控和告警机制,确保其在关键时刻能够正常工作。

8. 监控不是目的,而是手段,最终目的是确保数据库系统的稳定运行和良好性能。from PostgreSQL:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息