PostgreSQL 18 preview - 增加每个进程的 WAL 统计信息
PostgreSQL 18 preview - 增加每个进程的 WAL 统计信息
PostgreSQL 18 这个提交引入了一个对 PostgreSQL 监控能力的重大增强,它提供了每个后端进程的 WAL (预写式日志) 统计信息。
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=76def4cdd7c2b32d19e950a160f834392ea51744
Add WAL data to backend statistics master github/master
author Michael Paquier <[email protected]>
Tue, 11 Mar 2025 00:04:11 +0000 (09:04 +0900)
committer Michael Paquier <[email protected]>
Tue, 11 Mar 2025 00:04:11 +0000 (09:04 +0900)
commit 76def4cdd7c2b32d19e950a160f834392ea51744
tree 8996570dd7e4c2b4fd9aa9cbffd2fff97ec3fb01 tree
parent 59a1592e39fed164d4d6437d62a55aef36e866a5 commit | diff
Add WAL data to backend statistics
This commit adds per-backend WAL statistics, providing the same
information as pg_stat_wal, except that it is now possible to know how
much WAL activity is happening in each backend rather than an overall
aggregate of all the activity. Like pg_stat_wal, the implementation
relies on pgWalUsage, tracking the difference of activity between two
reports to pgstats.
This data can be retrieved with a new system function called
pg_stat_get_backend_wal(), that returns one tuple based on the PID
provided in input. Like pg_stat_get_backend_io(), this is useful when
joined with pg_stat_activity to get a live picture of the WAL generated
for each running backend, showing how the activity is [un]balanced.
pgstat_flush_backend() gains a new flag value, able to control the flush
of the WAL stats.
This commit relies mostly on the infrastructure provided by
9aea73fc61d4, that has introduced backend statistics.
Bump catalog version. A bump of PGSTAT_FILE_FORMAT_ID is not required,
as backend stats do not persist on disk.
Author: Bertrand Drouvot <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Reviewed-by: Nazir Bilal Yavuz <[email protected]>
Reviewed-by: Xuneng Zhou <[email protected]>
Discussion: https://postgr.es/m/Z3zqc4o09dM/[email protected]
让我们分解一下这意味着什么以及为什么它很重要:
关键概念:
WAL (预写式日志): PostgreSQL 用于确保数据持久性和一致性的机制。 在任何数据修改写入主数据文件之前,它首先写入 WAL。 这允许在发生崩溃时进行恢复。 后端进程 (Backend): 处理客户端连接的 PostgreSQL 进程。 每个数据库连接都会获得自己的后端进程。 pg_stat_wal: 一个现有的系统视图,提供关于整个数据库服务器的 WAL 活动的聚合统计信息。 pg_stat_activity: 一个系统视图,提供关于当前活跃的后端进程的信息,包括它们的 PID (进程 ID)。 pg_stat_get_backend_io(): 一个现有的系统函数,检索特定后端进程的 I/O 统计信息。 pgstat_flush_backend(): 一个用于将后端统计信息刷新到统计信息收集器的函数。
这个提交做了什么:
每个后端进程的 WAL 统计信息: 不再仅仅拥有聚合的 WAL 统计信息,这个提交允许你查看 每个单独的后端进程 生成了多少 WAL 活动。 这是理解工作负载分配和识别潜在瓶颈的一个重大改进。
实现: 该实现利用了现有的
pgWalUsage结构,该结构跟踪 WAL 使用情况。 它的工作原理是定期向统计信息收集器报告两个时间点之间 WAL 活动的差异。 这与pg_stat_wal的工作方式类似,但现在它是按后端进程跟踪的。新的系统函数:
pg_stat_get_backend_wal(): 这个新的函数允许你检索特定后端进程的 WAL 统计信息。 你提供后端进程的 PID 作为输入,该函数返回一个包含该后端进程的 WAL 统计信息的元组。与
pg_stat_activity的集成: 该提交强调了将pg_stat_get_backend_wal()与pg_stat_activity连接的有用性。 这允许你获得每个运行的后端进程生成的 WAL 活动的实时视图,以及关于后端进程的其他信息(例如,它当前正在执行的查询,它连接的用户)。 这有助于你了解 WAL 活动如何在不同的连接之间分配,并识别潜在的不平衡。pgstat_flush_backend()增强:pgstat_flush_backend()函数已更新,增加了一个新的标志,用于控制特定后端进程的 WAL 统计信息的刷新。 这提供了对如何以及何时收集 WAL 统计信息的更精细的控制。
为什么这很重要:
性能故障排除: 通过识别哪些后端进程生成了最多的 WAL 活动,你可以查明潜在的性能瓶颈。 例如,单个后端进程可能正在执行大量的写入操作,导致过多的 WAL 生成并影响整体数据库性能。 工作负载分析: 了解每个后端进程的 WAL 活动允许你分析不同连接之间的工作负载分配。 这可以帮助你优化你的应用程序和数据库配置。 资源监控: WAL 生成是数据库活动的关键指标。 监控每个后端进程的 WAL 活动可以提供更详细的资源利用率视图。 识别有问题的查询: 通过将 WAL 活动与每个后端进程正在执行的查询(使用 pg_stat_activity)相关联,你可以识别生成过多 WAL 的查询,并可能优化它们。容量规划: 了解 WAL 生成模式有助于容量规划,并确保你的存储系统可以处理 WAL 工作负载。
总而言之,这个提交提供了一个强大的新工具,用于监控和分析 PostgreSQL 中的 WAL 活动,从而实现更精细的性能故障排除、工作负载分析和资源监控。 它允许 DBA 和开发人员更深入地了解他们的应用程序如何与数据库交互,并识别潜在的优化领域。