亨丽埃塔·多姆布罗夫斯卡娅:日志记录:是什么,为什么,何时

亨丽埃塔·多姆布罗夫斯卡娅:日志记录:是什么,为什么,何时

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

本文讨论了PostgreSQL的日志记录和使用pgBadger进行性能问题调查的方法。作者指出,通常情况下我们很少使用Postgres日志进行监控,而是使用扩展和第三方工具。然而,在进行调查时,我们需要查看所有的语句,而不仅仅是执行时间超过10毫秒的语句。作者还介绍了pgBadger的新功能,包括分析日志的能力和跟踪用户会话的能力。作者表示正在努力实现这些功能的自动化处理。

🔎

延伸解读

默认日志配置的局限性

文章指出,Postgres 16有30个日志相关参数,但通常很少调整。默认设置如log_min_duration_statement=10只记录执行超过10毫秒的语句,这可能导致无法全面了解性能问题,例如无法判断慢查询是突然出现还是一直存在,也无法知道慢查询在同类查询中的比例。因此,仅依赖默认日志可能不足以进行深入调查。

调查场景下的日志策略

作者强调,Postgres日志主要用于调查特定事件,而非常规监控。在调查时,需要查看所有语句,而不仅仅是超过阈值的语句。开启完整日志(如log_min_duration_statement=0)可以记录所有语句,但会导致日志量激增,处理这些数据成为挑战。因此,需要在调查需求和日志管理之间权衡。

pgBadger的新功能与自动化

pgBadger是常用的性能调查工具,但需要开启完整日志才能有效分析。作者参与了pgBadger的新功能开发,包括--dump-raw-csv选项,允许生成原始CSV日志以便进一步分析。作者采用两次处理日志的方法:先生成常规报告,再生成原始CSV加载到数据库。目前正在努力实现这一过程的自动化。

❓

Q&A

PostgreSQL 日志记录有哪些配置参数?

PostgreSQL 有多个配置参数决定日志记录内容,在 Postgres 16 中,如果排除与文件命名和位置相关的参数,有 30 个相关参数。

为什么我们通常不使用 PostgreSQL 日志进行监控?

因为有许多扩展和第三方工具可以监控 PostgreSQL 的各种活动,如高 CPU 或 IO、连接数过多、磁盘使用增加、表膨胀等,这些工具都不使用 PostgreSQL 日志中的信息。即使监控查询性能变化,也使用 pg_stat_statements 而不是日志。

log_min_duration_statement=10 的设置有什么局限性?

该设置只记录执行时间超过 10 毫秒的语句,可能无法全面了解性能问题。它不能帮助判断是突然的峰值,还是执行时间一直略低于 10 毫秒最终达到阈值,也不能确定类似查询中慢查询的比例。

使用 pgBadger 需要开启哪些日志设置?

需要开启完整日志记录,pgBadger 的 README 列出了应开启的日志设置,包括:log_line_prefix、log_min_duration_statement=0、log_checkpoints=on、log_connections=on、log_disconnections=on、log_lock_waits=on、log_temp_files=0、log_autovacuum_min_duration=0、log_error_verbosity=default。

作者的日志记录哲学是什么?

作者的日志记录哲学是:默认几乎不记录日志;当需要为 pgBadger 收集数据时,几乎开启所有日志。如果能够及时删除日志且日志大小可控,也可以一直开启完整日志。

pgBadger 的新功能 –dump-raw-csv 有什么作用?

–dump-raw-csv 选项可以生成原始日志(已解析但未分析)的 CSV 格式,以便加载到数据库表中,从而能够按自己的方式分析日志(分组、聚合、切片等)并跟踪单个用户会话。

🏷️

标签

➡️

继续阅读