↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

pgBadger 13.2

并行处理

快速分析 PostgreSQL 与 PgBouncer 日志,生成完整且可独立浏览的报告

pgBadger 提供两种互补的多进程模式。选择时应关注输入日志的形态,而不只是 CPU 数量。

选项 并行单位 最适合 主要限制
-j N / --jobs N 一个日志文件的多个分块 单个可定位的大日志 分块边界可能重复或漏掉少量查询
-J N / --Jobs N 完整日志文件 大量相互独立的日志 只有文件数量足以填满工作进程时才有明显收益

使用 -j 拆分单个大文件

$ pgbadger -j 8 /var/log/postgresql/postgresql.log

上游算法把每个文件分成 N 个字节区间,为每个区间 fork 一个解析进程,把统计结果写入临时二进制文件,最后合并生成报告。

对于每个日志文件:
    把文件划分为 N 个分块
    确定每个分块的起止偏移量
    在对应偏移量启动 N 个解析进程
    每个进程写入一份临时二进制统计文件
等待所有工作进程结束
合并二进制文件并生成报告

日志记录和多行语句不会恰好与字节偏移对齐,因此每个文件约有最多 N 条查询可能在边界处被截断、遗漏,或更常见地被重复计数。该模式适合大文件的聚合分析,不适合要求每条记录计数完全精确的取证流程。

使用 -J 并行处理多个文件

$ pgbadger -J 8 /var/log/postgresql/postgresql-*.log

每个工作进程独占一个完整文件,因此不会出现分块边界误差。它在有数百个小文件,并且 CPU 与 I/O 能力充足时最有效。上游文档也允许 -J 处理相互独立的压缩文件;使用 -j 对单文件分块则要求输入未压缩且可随机定位。

上游基准测试

上游手册给出了以下 8 CPU 主机测试。它适合用来比较两种算法,不应当作现代硬件的耗时预测。

单个 9.5 GB 文件:

选项 1 CPU 2 CPU 4 CPU 8 CPU
-j 1h41m18 50m25 25m39 15m58
-J 1h41m18 54m28 41m16 34m45

两百个 10 MB 文件,共 2 GB:

选项 1 CPU 2 CPU 4 CPU 8 CPU
-j 20m15 9m56 5m20 4m20
-J 20m15 9m49 5m00 2m40

实用默认值是:少量大文件使用 -j,大量小文件使用 -J。在输入和平台允许时可以组合两种模式,但仍需实测;日志解析很可能先受到存储吞吐量限制,而不是 CPU 限制。

限制与临时文件

  • -j 不能用于压缩或 CSV 输入,并且依赖进程 fork,因此不适用于 Windows。
  • 上游远程输入路径不支持远程 CSV 解析。
  • 并行分析会在指定临时目录中创建形如 tmp_pgbadgerXXXX.bin 的文件;默认使用系统临时目录。
  • pgBadger 运行期间不要清理这些文件。可用 --tempdir 把它们放到容量充足的存储上。
  • 从较小的工作进程数开始,观察 CPU、读取吞吐量、临时空间占用与总耗时后再调大。
来源与许可

文档取自 pig.center · 上游文档

版本
13.2
许可
PostgreSQL
来源修订
67435324c7d65112905ab8f5c5cd83820587cbe49071d0fe1bd04c92de2fc3aa
译文修订
67435324c7d65112905ab8f5c5cd83820587cbe49071d0fe1bd04c92de2fc3aa
原始 Markdown