Postgresql 监控你说了不算,谁说了算 ? (2 PGBADGER)

PgBadger是一款强大的PostgreSQL日志分析工具,它能够详细分析数据库日志,提供包括连接统计、查询性能、锁等待、真空活动等在内的全方位洞察。通过PgBadger,用户可以发现慢查询、监控checkpoint活动、跟踪锁竞争,以及评估vacuum和analyze操作的效率。

日志,日志,日志,无论你是IT 的那个LEVEL 都知道,没有日志的系统是有硬伤,POSTGRESQL 的日志在数据库界应该属于上层的,一个错误的日志,包含的事件类型是很全面的,当然这也带出另一个问题,他不像MYSQL 那样将日志分的很细,慢查询的是慢查询,错误是错误,所以一个合适的分析的工具将变得非常重要。

通过 pgbadger 可以对postgresql 的日志进行分析,并且以网页的方式信息展示,还是先给展示一下大致的样子。

可统计的信息很多所以这个pgbadger 的功能也是很丰富的,其中有一个功能要说,他可以弥补上一期监控软件的一个缺失,就是慢查询的问题。当然问题的一个个说。

首先pgbadger 是一个通过日志来分析问题的和展示问题的软件,那我们就的把问题的关键点回归到日志,在多种数据库中,Postgresql的日志可以说是很全面的,并且都在一个日志体系里面体现,这也就为分析日志创造了方便。

那怎么让postgresql 记录更多的日志以便pgbadger 能进行更多的分析展示就是一个问题。

所以还得先说一下,日志的配置

在基于 stderr 的日志并打开了 logging_collector 

然后需要对日志的记录进行微调

log_checkpoints = on

log_connections = on

log_disconnections = on

log_lock_waits = on

log_temp_files = 1

log_autovacuum_min_duration = 1

log_error_verbosity = default

Log_min_duration_statement = 1 

log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h‘

在打开这些开关后,需要重启动数据库

然后直接执行命令生成数据

生成的过程和你的日志的大小有关,所以这里就又得说另外一件事,定期要进行日志的rotate , 保证日志不要太BIG ,导致分析的过程太慢,生成的INDEX.html 文件太大。

上面说过pgbadger 可以最大限度的弥补上一期的监控的分析的缺陷,

其中可以从中获得, 关于connections 的信息

建立连接的中的最大,最小以及平均连接的时间, 每个数据库连接以饼图的方式来进行展示,以每个用户的方式来进行连接展示。同时也可以对session进行同样的分析。这样如果是写周报,就会弥补上一期的monitor software 的一些不足。

另外对checkpoint 的监控也是通过日志中的记录来进行事后分析,其中可以对checkpoint buffers  checkpoint files  checkpoint warings checkpoint distance 等进行数据的分析和展示

另外对真空/分析分布:显示真空和分析随时间变化的线图,以及消耗CPU处理能力最多的表上的信息给与显示,尤其对目前的PG 来说是重要的,知道目前的vacuum 做的如何。

例如分析每张表,以及tuple 的删除以及每张表的vacuum 和超时的情况。

最后就是锁,与查询的信息了,通过锁与查询的分析,可以找到目前日志文件中这一段时间中最耗时的查询

最后TOP页,可以给出

查询时间直方图,最慢的单个查询,耗时查询:规范化查询及其总持续时间的列表,最频繁查询:一列规范化查询和执行次数,归一化最慢查询:归一化查询及其平均持续时间的列表,等信息。

events 页面也对目前的分析的LOG 本身的信息归属做了一个分析。

PGBADGER 和 上一期的 PGCULL 可能目前的一个问题就是都是英文版本,这一点可能算是一个缺点,除此以外,这两个软件一期基本上可以解决80%以上的性能和突发事件的分析问题。

PGBADGER 的安装会更方便,解压及使用,所以这也是这期根本没说怎么安装的问题。

有问题可以一期解决,欢迎加入

<think>好的,用户现在想了解如何实时监控PostgreSQL数据库的空间使用增长。之前他们询问过如何查询当前的空间大小,现在需要实时监控增长情况。首先,我需要结合之前的回答和提供的引用内容来整理解决方案。 首先,用户提到的引用[1]中提到了PostgreSQL监控工具和指标,比如pg_stat_activity、pg_stat_database等,这些系统视图可能对实时监控有帮助。引用[2]提到了pgCluu这个工具,可以收集性能数据,可能用于监控空间增长。引用[4]中的pgBadger用于分析日志,但不确定是否直接关联到空间监控,不过日志分析可能间接帮助识别空间增长的原因。用户需要的是实时监控,所以可能需要持续的数据收集和展示。之前的回答里提到了使用SQL查询数据库、表的大小,但这是静态的。实时监控可能需要定期执行这些查询并记录结果,或者使用工具来持续跟踪。接下来,我需要考虑不同的监控方法:1.**系统视图动态查询**:使用pg_stat_database和pg_stat_user_tables等视图,定期查询数据变化。例如,pg_stat_database中的datid和datname可以关联到数据库,而统计信息可能包括空间使用情况。2.**自定义监控脚本**:编写shell脚本或Python脚本,定期执行查询并将结果存储或展示,比如用Prometheus记录指标,再用Grafana展示趋势图。3.**扩展工具使用**:比如pg_stat_statements扩展,虽然主要用于查询性能,但结合其他视图可能帮助分析空间增长的原因。此外,pgAdmin的仪表盘功能可能提供实时监控的界面。4.**第三方工具**:如pgCluu和pgBadger,虽然pgCluu用于性能监控,可能包含空间数据的收集;pgBadger分析日志,可能发现导致空间增长的操作。5.**文件系统监控**:直接监控数据库目录的文件大小变化,使用inotify或定期du命令,但这种方法比较底层,可能需要结合数据库层面的信息。然后,需要考虑如何实现这些方法的具体步骤,比如如何设置定时任务,如何配置Prometheus的exporter,或者如何安装和使用第三方工具。同时,用户可能没有提到的注意事项,比如权限问题(监控脚本需要访问系统视图的权限),或者统计信息的延迟(可能需要配合VACUUM来更新统计信息)。最后,生成相关问题,可能涉及如何自动化监控、如何处理空间增长过快、如何设置警报等。</think>### 分步解答:实时监控PostgreSQL数据库空间增长 #### 1. 动态查询系统视图 通过`pg_stat_database`视图实时跟踪数据库级空间变化: ```sql SELECT datname AS 数据库名, pg_size_pretty(pg_database_size(datname)) AS 当前大小, stats_reset AS 统计重置时间 FROM pg_stat_database WHERE datname = current_database(); ``` 该查询可显示空间使用量及统计信息更新时间,建议每5分钟执行一次[^1][^3] #### 2. 表级空间变化监控 使用`pg_stat_user_tables`监控具体表的空间增长趋势: ```sql SELECT schemaname || '.' || relname AS 表名, pg_size_pretty(pg_total_relation_size(relid)) AS 总大小, n_tup_ins AS 插入行数, n_tup_upd AS 更新行数, n_tup_del AS 删除行数 FROM pg_stat_user_tables WHERE schemaname = 'public'; ``` 通过观察插入/更新操作量与空间增长的关系,定位主要增长源[^1][^3] #### 3. 自动化监控脚本 创建定时任务脚本(示例为shell脚本): ```bash #!/bin/bash DATE=$(date +%Y%m%d-%H%M%S) psql -U postgres -d mydb -c \ "SELECT current_database(),pg_size_pretty(pg_database_size(current_database()))" \ >> /var/log/pg_space_$DATE.log ``` 使用`crontab -e`设置每10分钟执行: ```bash */10 * * * * /path/to/script.sh ``` #### 4. 使用监控扩展工具 - **pg_stat_statements扩展**: 1. 修改postgresql.conf: ```ini shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all ``` 2. 查询空间相关操作: ```sql SELECT query, calls, rows FROM pg_stat_statements WHERE query LIKE '%INSERT%' OR query LIKE '%UPDATE%'; ``` - **Prometheus + Grafana监控栈**: 1. 安装postgres_exporter采集指标 2. 配置Grafana面板显示数据库大小增长曲线: ```sql pg_database_size{datname="$database"} ``` #### 5. 文件系统级监控 直接监控数据目录增长: ```bash watch -n 60 "du -sh /var/lib/postgresql/15/main/base/" ``` 使用`inotifywait`监控文件变化: ```bash inotifywait -m /var/lib/postgresql/15/main/base -r -e modify ``` #### 实时监控指标公式 数据库空间增长率计算: $$ \text{增长率} = \frac{\Delta \text{size}}{\Delta t} = \frac{s(t_2) - s(t_1)}{t_2 - t_1} $$ 其中$s(t)$表示时间$t$的数据库大小[^1] #### 注意事项 1. 高频率查询可能影响性能,建议监控间隔≥5分钟 2. 需开启`track_counts`参数以获取准确统计信息 3. 结合WAL日志分析可识别突发性空间增长[^4] 4. 对分区表需单独监控子表空间
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值