Bertrand Drouvot:欢迎使用pg_shmemviz:PostgreSQL共享内存可视化工具

Bertrand Drouvot:欢迎使用pg_shmemviz:PostgreSQL共享内存可视化工具

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

内容提要

pg_shmemviz是一款可视化PostgreSQL共享内存的新工具,提供内存映射、分配表、结构检查器和字节视图,支持动态共享内存、NUMA节点显示及快照对比。它通过调试器读取DWARF信息,需在开发环境使用,当前为beta版,兼容PostgreSQL 20devel。

🔎

延伸解读

调试利器:从物理布局到字节级分析

pg_shmemviz 将 PostgreSQL 共享内存的物理布局、分配表、C 结构字段和原始字节整合在一个同步界面中。它通过调试器读取 DWARF 信息,无需附加到运行中的服务器,适合开发调试。与 pg_buffercache 等现有视图相比,它提供了更底层的视角,帮助定位内存布局、填充和指针引用等问题。

使用前提与限制

该工具要求 PostgreSQL 服务器带有调试信息,且需匹配的 pg_config 和 postgres 可执行文件。当前为 beta 版,仅针对 PostgreSQL 20devel 验证。由于是顺序无锁复制,快照可能包含不一致或撕裂的数据,且共享内存可能包含敏感信息。快照可能很大,需注意存储和隐私。

安全与部署注意事项

pg_shmemviz 不应在生产实例上运行,仅用于隔离的开发环境。查看器无认证、授权或 TLS,默认绑定 127.0.0.1,远程访问需通过 SSH 隧道。NUMA 捕获可能触发未使用页面的缺页中断,影响性能。快照对比功能有助于分析变更,但需确保快照兼容。

Q&A

pg_shmemviz是什么?

pg_shmemviz是一个用于可视化PostgreSQL共享内存的新工具,它提供共享内存映射、分配表、结构检查器和物理字节视图,帮助开发者查看内存的物理布局、C结构体字段、填充和原始字节。

pg_shmemviz有哪些主要功能?

主要功能包括:共享内存映射(显示命名分配、填充和未使用范围)、分配表、结构检查器(利用DWARF信息显示嵌套C结构体、字段偏移、值和填充)、物理字节视图(按字段和填充分类的字节窗口)、动态共享内存和DSA段显示、NUMA节点显示、快照对比,以及可选的pg_buffercache摘要。

pg_shmemviz如何工作?

pg_shmemviz通过调试器(macOS上使用LLDB,其他平台使用GDB)读取PostgreSQL可执行文件中的DWARF调试信息,从而解析共享内存中的C结构体布局。它不附加到运行中的服务器,而是捕获共享内存的离线快照,并在本地浏览器中显示。

pg_shmemviz的使用前提条件是什么?

必须在开发或调试环境中使用,不能在生产实例上运行。需要PostgreSQL服务器具有调试信息,并且需要匹配的pg_config、postgres可执行文件和开发文件。

如何安装和使用pg_shmemviz?

安装:进入pg_shmemviz目录,运行make PG_CONFIG=/path/to/postgres-install/bin/pg_config和make install。然后在数据库中创建扩展:psql -d postgres -c 'CREATE EXTENSION pg_shmemviz'。捕获快照:~/pg_shmemviz/bin/pg_shmemviz capture --pg-config /path/to/postgres-install/bin/pg_config --dbname postgres /path/to/new-snapshot。启动查看器:~/pg_shmemviz/bin/pg_shmemviz serve /path/to/new-snapshot。

pg_shmemviz支持快照对比吗?

支持。可以同时提供两个兼容的快照进行对比,例如:~/pg_shmemviz/bin/pg_shmemviz serve /path/to/before-snapshot /path/to/after-snapshot。对比可以在分配、字段和字节级别进行,并高亮显示更改的字节。

pg_shmemviz有哪些限制或注意事项?

注意事项包括:捕获是顺序、无锁的,因此相关字段可能来自不同时刻,多字节非原子字段可能撕裂;需要精确的postgres可执行文件;快照可能很大且包含敏感数据;NUMA捕获可能触发页面错误;查看器没有认证、授权或TLS,应仅在回环地址上使用;自动结构发现目前仅针对PostgreSQL 20devel验证。

🏷️

标签

➡️

继续阅读