PostgreSQL 活动会话历史记录 - 新的 pgsentinel 扩展

公司 PG哨兵 发布了同名的 pgsentinel 扩展(github仓库),它将 pg_active_session_history 视图添加到 PostgreSQL - 活动会话的历史记录(类似于 Oracle 的 v$active_session_history)。

本质上,这些只是 pg_stat_activity 的逐秒快照,但有以下要点:

  1. 所有累积的信息仅存储在RAM中,并且消耗的内存量由最后存储的记录的数量来调节。
  2. 添加了 queryid 字段 - 与 pg_stat_statements 扩展相同的 queryid(需要预安装)。
  3. 添加 top_level_query 字段 - 调用当前查询的查询文本(如果使用 pl/pgsql)


pg_active_session_history 字段的完整列表:

      专栏 | 类型 ------------------+------------------------ ash_time | 带有时区的时间戳 datid | oid 日期名称 | 文本 pid | 整数 usesysid | oid 用户名 | 文本应用程序名称| 文本 client_addr | 文本 client_hostname | 文本客户端端口| 整数 backend_start | 带有时区的时间戳 xact_start | 带有时区的时间戳带有时区的时间戳 state_change | 带有时区的时间戳文本等待事件| 文本状态 | 文本 backend_xid | xid backend_xmin | xid 顶级查询 | 文字查询| 文本查询ID | bigint 后端_类型 | 文本                     

目前还没有现成的安装包。 建议下载源代码并自行组装库。 您首先需要为您的服务器安装“devel”包,并在 PATH 变量中设置 pg_config 的路径。 我们收集:

cd pgsentinel/src
使
使安装

在postgres.conf中添加参数:

Shared_preload_libraries = 'pg_stat_statements,pgsentinel'
track_activity_query_size = 2048
pg_stat_statements.track = 全部

# 内存中保存的最近记录数
pgsentinel_ash.max_entries = 10000

重新启动 PostgreSQL 并创建扩展:

创建扩展 pgsentinel;

积累的信息使我们能够回答以下问题:

  • 您在哪些等待时段花费最多时间?
  • 哪些会议最活跃?
  • 哪些请求最活跃?

当然,您可以使用 SQL 查询获得这些问题的答案,但通过使用鼠标突出显示感兴趣的时间间隔,可以更方便地在图表上直观地看到这一点。 您可以使用免费程序来做到这一点 PASH浏览器 (您可以在 部分下载收集的二进制文件 发布).

启动时,PASH-Viewer(从版本 0.4.0 开始)检查 pg_active_session_history 视图是否存在,如果存在,它将从中加载整个累积历史记录并继续读取新的传入数据,每 15 秒更新一次图表。

PostgreSQL 活动会话历史记录 - 新的 pgsentinel 扩展

来源: habr.com

添加评论