查询性能监控扩展 pg_stat_monitor
17.1 概述
注意:这是一个测试版,可能会进一步更改。我们建议仅在测试环境中使用它。
pg_stat_monitor 是 PostgreSQL 的查询性能监控工具。它试图通过在单个视图中提供急需的查询性能洞察力来提供更全面的图片。
pg_stat_monitor 提供改进的洞察力,允许数据库用户了解查询来源、执行、计划统计和详细信息、查询信息和元数据。这显着提高了可观察性,使用户能够调试和调整查询性能。 pg_stat_monitor 是在 pg_stat_statements 的基础上开发的,作为其更高级的替代品。
虽然 pg_stat_statements 提供了不断增加的指标,但 pg_stat_monitor 聚合了收集的数据,从而节省了用户自己做的工作。 pg_stat_monitor 以可配置的基于时间的单位存储统计信息——存储桶。这允许专注于为较短时间段生成的统计信息,并使查询时间信息(例如最大/最小/平均时间)更加准确。
要了解 pg_stat_monitor 中提供的其他功能,请参阅功能部分和用户指南。
pg_stat_monitor 支持 PostgreSQL 版本 11 及以上。它与 PostgreSQL Global Development Group (PGDG) 提供的 PostgreSQL 和 Percona Distribution for PostgreSQL 兼容。
RPM(适用于 RHEL 和 CentOS)和 DEB(适用于 Debian 和 Ubuntu)软件包可从 Percona 存储库获取 PostgreSQL 版本 11、12 和 13。
RPM 软件包也可在官方 PostgreSQL (PGDG) yum 存储库中获得。
17.2 支持的版本
pg_stat_monitor 应该在 Percona Distribution for PostgreSQL 和 PostgreSQL 的最新版本上工作,但仅在这些版本上进行测试:
Distribution | Version | Provider |
---|---|---|
Percona Distribution for PostgreSQL | 11, 12, 13 and 14 | Percona |
PostgreSQL | 11, 12, 13 and 14 | PostgreSQL Global Development Group (PGDG) |
17.3 特性
pg_stat_monitor 通过从性能、应用程序和分析角度提供更全面的查询视图来简化查询可观察性。这是通过将数据分组到可配置的时间桶中来实现的,这些时间桶允许捕获较小时间窗口的负载和性能信息。因此,可以根据时间和工作量来识别性能问题和模式。
-
时间间隔分组: pg_stat_monitor 不是提供一组不断增加的计数,而是计算配置数量的时间间隔 - 时间桶的统计信息。这允许更好的数据准确性,特别是在高分辨率或不可靠网络的情况下。
-
多维分组:虽然 pg_stat_statements 按 userid、dbid、queryid 对计数器进行分组,但 pg_stat_monitor 使用更详细的组来获得更高的精度。这允许用户深入了解查询的性能。
-
捕获查询中的实际参数:pg_stat_monitor 允许您选择是否要查看带有参数占位符的查询或实际参数数据。通过使用户能够执行相同的查询,这简化了调试和分析过程。
-
查询计划:现在,每个 SQL 都附有为执行而构建的实际计划。如果您想了解为什么特定查询比预期慢,这是一个巨大的优势。
-
语句的表访问统计信息:这使我们能够轻松识别访问给定表的所有查询。该集合与 pg_stat_statements 提供的信息相当。
-
直方图:视觉表示非常有用,因为它可以帮助识别问题。借助直方图功能,现在可以查看响应 SQL 查询的计时/调用数据直方图。是的,它甚至可以在 psql 中使用。
17.4 文档
在 pg_stat_monitor 文档中查找有关 pg_stat_monitor 及其用法的更多信息。
了解发行说明中的最新改进
有关如何贡献,请参阅贡献指南
17.5 支持的平台
PostgreSQL YUM 存储库支持以下平台的所有受支持版本的 pg_stat_monitor:
-
Red Hat Enterprise/Rocky/CentOS/Oracle Linux 7 和 8
-
Fedora 33 和 34
在 Percona Release Lifecycle Overview 页面上找到 Percona Distribution for PostgreSQL 中 pg_stat_monitor 支持的平台列表。
17.6 安装指南
您可以从以下来源安装 pg_stat_monitor:
-
Percona 存储库,
-
PostgreSQL PGDG yum 存储库,
-
PGXN 和
-
源代码。
17.6.1 从 Percona 存储库安装
要从 Percona 存储库安装 pg_stat_monitor,您需要使用 percona-release 存储库管理工具。
1.按照与您的操作系统相关的说明安装 percona-release
2.启用 Percona 存储库:
percona-release setup ppgXX
复制
将 XX 替换为所需的 PostgreSQL 版本。例如,要为 PostgreSQL 13 安装 pg_stat_monitor,请指定 ppg13。
3.安装 pg_stat_monitor 包
- For Debian and Ubuntu
apt-get install percona-pg-stat-monitor13
复制
- For RHEL and CentOS
yum install percona-pg-stat-monitor13
复制
17.6.2 从 PostgreSQL yum 存储库安装
按照 PostgreSQL 文档中 Linux 下载(Red Hat 系列)一章中的说明安装 PostgreSQL 存储库。
Install pg_stat_monitor
:
dnf install -y pg_stat_monitor_<VERSION>
复制
将 VERSION 变量替换为您正在使用的 PostgreSQL 版本(例如,为 PostgreSQL 13 指定 pg_stat_monitor_13)
17.6.3 从 PGXN 安装
您可以使用 PGXN 客户端从 PGXN(PostgreSQL 扩展网络)安装 pg_stat_monitor。
使用以下命令:
pgxn install pg_stat_monitor
复制
17.7 配置
您可以在 pg_stat_monitor_settings 视图中找到 pg_stat_monitor 扩展的配置参数。要更改默认配置,请使用 GUC(授予统一配置)系统为所需参数指定新值。要了解更多信息,请参阅用户指南的配置部分。
17.8 安装
您可以在您的 postgresql 实例未运行时启用 pg_stat_monitor。
pg_stat_monitor 需要在开始时加载。扩展需要额外的共享内存;因此,为 shared_preload_libraries 参数添加 pg_stat_monitor 值并重新启动 postgresql 实例。
使用 psql 终端中的 ALTER SYSTEM 命令修改 shared_preload_libraries 参数。
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_monitor';
复制
**注意:**如果您已将其他模块添加到 shared_preload_libraries 参数(例如,pg_stat_statements),请在 ALTER SYSTEM 命令中列出所有这些模块,并用逗号分隔。
对于 PostgreSQL 13 及更早的版本,pg_stat_monitor 必须遵循 pg_stat_statements。
例如,
ALTER SYSTEM SET shared_preload_libraries = ‘foo, pg_stat_statements, pg_stat_monitor’。
在 PostgreSQL 14 中,可以按任何顺序指定模块。
启动或重新启动 postgresql 实例以应用更改。
- 在 Debian 和 Ubuntu 上:
sudo systemctl restart postgresql.service
复制
- 在 Red Hat Enterprise Linux 和 CentOS 上:
sudo systemctl restart postgresql-13
复制
使用 CREATE EXTENSION 命令创建扩展。使用此命令需要超级用户或数据库所有者的权限。以数据库的超级用户身份连接到 psql 并运行以下命令:
CREATE EXTENSION pg_stat_monitor;
复制
这允许您查看 pg_stat_monitor 收集的统计信息。
默认情况下,为 postgres 数据库创建 pg_stat_monitor。要访问其他数据库的统计信息,您需要为每个数据库创建扩展。
-- Select some of the query information, like client_ip, username and application_name etc. postgres=# SELECT application_name, userid AS user_name, datname AS database_name, substr(query,0, 50) AS query, calls, client_ip FROM pg_stat_monitor; application_name | user_name | database_name | query | calls | client_ip ------------------+-----------+---------------+---------------------------------------------------+-------+----------- psql | vagrant | postgres | SELECT application_name, userid::regrole AS user_ | 1 | 127.0.0.1 psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 3 | 127.0.0.1 psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 1 | 127.0.0.1 psql | vagrant | postgres | SELECT application_name, userid AS user_name, dat | 8 | 127.0.0.1 psql | vagrant | postgres | SELECT bucket, substr(query,$1, $2) AS query, cmd | 1 | 127.0.0.1 (5 rows)
复制
要了解有关 pg_stat_monitor 功能和用法的更多信息,请参阅用户指南。要查看 pg_stat_monitor 提供的所有其他数据元素,请参阅参考资料。
17.9 源码包安装
要从源代码构建 pg_stat_monitor,您需要以下内容:
- git
- make
- gcc
- pg_config
您可以从 GitHub 上的发布页面或使用 git 下载 pg_stat_monitor 最新版本的源代码:
git clone git://github.com/percona/pg_stat_monitor.git
复制
编译并安装扩展
cd pg_stat_monitor make USE_PGXS=1 make USE_PGXS=1 install
复制
17.10 卸载 pg_stat_monitor
要卸载 pg_stat_monitor,请执行以下操作:
1.禁用统计信息收集。从 psql 终端运行以下命令:
ALTER SYSTEM SET pg_stat_monitor.pgsm_enable = 0;
复制
2.删除 pg_stat_monitor 扩展:
DROP EXTENSION pg_stat_monitor;
复制
3.从 shared_preload_libraries 配置参数中删除 pg_stat_monitor:
ALTER SYSTEM SET shared_preload_libraries = '';
复制
**重要提示:**如果 shared_preload_libraries 参数包括其他模块,请全部指定它们以便 ALTER SYSTEM SET 命令继续使用它们。
4.重新启动 postgresql 实例以应用更改。以下命令重新启动 PostgreSQL 13。将版本值替换为您正在使用的版本值。
- 在 Debian 和 Ubuntu 上:
sudo systemctl restart postgresql.service
复制
- 在 Red Hat Enterprise Linux 和 CentOS 上:
sudo systemctl restart postgresql-13
复制