pg_stat_ch,
这是一个开源的 Postgres 扩展,会将每条语句的计数器流式传输到
ClickHouse Cloud。遥测数据会在离开 Postgres 之前于数据库内部完成归一化
—— 字面量会被移除并替换为占位符,因此你查询的
确切值绝不会进入遥测流。
打开 Query insights
- 一个可在单屏内完成数据库健康检查的 概览。
- 一个 慢查询模式 表,对数据库运行过的每种查询模式进行排名, 并可按你怀疑有问题的维度排序。
- 一个 最近查询 面板,按时间倒序列出每次单独执行的查询。
- 一个 详情弹出面板,汇总单个模式的所有计数器。
概览
| 面板 | 显示内容 |
|---|---|
| Queries / sec | 所选时间窗口内按速率归一化的查询量。 |
| Query latency | 在同一张图表中显示均值、p50、p95 和 p99,便于观察尾部延迟何时开始偏离中位数。 |
| Operations breakdown | 环形图,展示你的工作负载实际由 SELECT、INSERT、UPDATE 及其他操作构成的占比。 |
| Rows returned / affected | 该工作负载在该时间窗口内移动的总行数。 |
| Buffer hit ratio | 环形图,展示共享块命中数与共享块读取数的对比,图例中包含总 CPU 时间。 |
| Errors | 错误总数,并按时间维度拆分显示。 |
慢查询模式
按你怀疑的因素排序
- 总运行时间 — 数据库花费挂钟时间最多的地方。
- CPU 时间 — 计算开销大的模式。
- 调用次数 — 高频模式。
- 错误 — 反复出现的失败。
- 平均值 / P50 / P95 / P99 / 最大延迟 — 按百分位查看离群值。
- 返回行数、读取块数、命中块数、WAL 字节数 — 通过引擎、缓存或预写日志传输数据量最多的模式。
缩小表的筛选范围
- 数据库
- 用户
- 操作 (
SELECT,INSERT,UPDATE,DELETE, …) - 应用程序 — 连接字符串中的
application_name
sales db 上执行了什么操作”
就对应两个下拉菜单。过滤值会根据你的实例实际运行过的内容自动填充。
最近查询
详情弹出面板
- 查询模式 — 将字面量替换为
$1、$2、… 后的标准化 SQL,以及一个复制到剪贴板按钮。 - 聚合资源使用情况 — 一个包含 13 个统计卡片的网格,涵盖总 调用次数、平均/P95/P99/最大延迟、总运行时间、返回行数、缓存 命中率、读取块数、命中块数、CPU 时间、WAL 字节数以及错误数。
- 查询上下文 — 该模式对应的数据库、用户、操作和应用程序。
- 值得关注的执行 — 错误、异常缓慢的执行以及 返回大量结果的执行,会在完整的最近列表之前优先显示。
- 最近执行 — 同一模式的各次独立执行, 包含每次执行的计数器。
单次执行计数器
- 共享块 —— read 和 hit 始终显示;written 和 dirtied 仅在非零时显示。
- 本地和临时块操作 —— 临时块操作非零表示某次 sort 或 hash 已落盘。
- 读取 / 写入时间 —— I/O 时间,与 CPU 时间分开显示。
- CPU 时间 —— 分别显示用户态和系统态时间。
- 并行工作线程 —— 计划数量与实际启动数量。
- JIT —— JIT 编译总时间和函数数量。
- WAL —— 字节数和记录数。
Query insights API
工作原理
在 Postgres 中完成归一化,在传输出去之前
pg_stat_ch 会挂接到 parse-analyze 阶段,把每个字面量替换为
占位符 ($1、$2、……) ,并将生成的模式缓存在以 queryid 为键的
每个后端 LRU 中。执行器完成该语句时,事件中附带的就是这个
缓存的模式。包含具体值的原始语句永远不会离开数据库。
尽量不影响数据库
原始事件,而非聚合数据
pg_stat_ch 会为每条已执行的语句 (包括顶层和
嵌套语句) 发出一个原始事件,具体取决于采样设置。UI 中的每个百分位数、排名和细分
都是针对同一事件流的 ClickHouse 查询。
与客户使用的相同引擎
开源
pg_stat_ch 采用 Apache 2.0 许可证。可在任何 Postgres 上运行,并将数据发送到任何
ClickHouse。源代码和问题跟踪见
github.com/clickhouse/pg_stat_ch。
- 监控仪表板 — 内置资源与活动图表
- Prometheus 端点 — 将主机级指标抓取到您自己的可观测性栈中
- Managed Postgres OpenAPI — 以编程方式查询慢查询模式和最近的执行记录
- 扩展 — Managed Postgres 实例上可用的扩展
- GitHub 上的
pg_stat_ch— 为 Query Insights 提供支持的开源扩展