pg_stat_monitor
1. 概述
pg_stat_monitor 是 PostgreSQL 的查询性能监控工具。它能收集性能统计数据,并通过统一视图和直方图形式直观展示查询性能指标。
该工具可帮助数据库用户全面掌握查询来源、执行情况、计划统计与详细信息,以及查询元数据。这极大地提升了可观测性,使用户能够有效调试和优化查询性能。
2. 安装
IvorySQL的安装包里已经集成了pg_stat_monitor插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装pg_stat_monitor。如您使用源码方式安装了IvorySQL,可以继续通过源码方式继续安装pg_stat_monitor插件,IvorySQL社区为您提供了源码安装步骤:
要从源代码构建 pg_stat_monitor,您需要以下组件:
-
git
-
make
-
gcc
-
pg_config
您可以从 GitHub 上的发布页面 下载 pg_stat_monitor 指定版本的源代码,或者使用 git 命令:
git clone https://github.com/percona/pg_stat_monitor.git
编译并安装扩展程序,假如环境中已经安装了IvorySQL,安装路径为/usr/ivory-5
cd pg_stat_monitor
export PG_CONFIG=/usr/ivory-5/bin/pg_config
make USE_PGXS=1
make USE_PGXS=1 install
3. 加载模块
在启动时,将 pg_stat_monitor 添加到 shared_preload_libraries 配置参数中,以加载该库。这是因为 pg_stat_monitor 需要额外的共享内存。
修改 shared_preload_libraries 参数:
shared_preload_libraries = 'pg_stat_monitor';
注意:若 shared_preload_libraries 参数中已存在其他模块(例如 pg_stat_statements),需用逗号分隔全部列出。pg_stat_monitor 必须排在 pg_stat_statements 之后,例如:
shared_preload_libraries = 'liboracle_parser, ivorysql_ora, pg_stat_statements, pg_stat_monitor';
配置完成后,重启 IvorySQL实例使配置生效。
pg_ctl restart -D data
将 pg_stat_monitor 添加至 shared_preload_libraries 后,该扩展会立即开始收集所有现有数据库的统计信息。要查看监控数据,需在每个待监控的数据库中创建视图。
4. 创建扩展视图
请使用具有超级用户或数据库所有者权限的账户执行以下操作。以超级用户身份连接至目标数据库,运行以下命令创建扩展:
CREATE EXTENSION pg_stat_monitor;
完成设置后,即可查看pg_stat_monitor收集的统计信息。
5. 使用
以获取查询执行时间信息为例,连接数据库执行以下SQL:
SELECT userid, total_exec_time, min_exec_time, max_exec_time, mean_exec_time, query FROM pg_stat_monitor;
userid | total_exec_time | min_exec_time | max_exec_time | mean_exec_time | query
--------+-----------------+---------------+---------------+----------------+----------------------------------------------------------------------------------------------
10 | 1.532168 | 0.749108 | 0.78306 | 0.766084 | SELECT userid, datname, queryid, substr(query,$1, $2) AS query, calls FROM pg_stat_monitor
10 | 0.755857 | 0.755857 | 0.755857 | 0.755857 | SELECT application_name, client_ip, substr(query,$1,$2) as query FROM pg_stat_monitor
10 | 0 | 0 | 0 | 0 | SELECT userid, total_time, min_time, max_time, mean_time, query FROM pg_stat_monitor;
10 | 0 | 0 | 0 | 0 | SELECT userid, total_exec_time, min_time, max_time, mean_time, query FROM pg_stat_monitor;
(4 rows)
更多关于pg_stat_monitor的使用,请参阅 pg_stat_monitor 官方文档