postgresql - 将 pg_stat_activity 与 pg_stat_statements 结合起来?

标签 postgresql postgresql-9.6 pg-stat-statements

我正在研究当用户运行大量查询时数据库内的重负载。我进入了 pg_stat_statements,它显示了用户的 id、查询以及运行所需的时间。另一方面,我发现 pg_stat_activity 向我显示了数据库的事件用户及其 pid, 查询开始, ETC。 我加入了 2 个,因为它们的用户 ID 很相似。

SELECT a.usesysid,a.pid, a.client_addr, a.query_start, st.query, st.total_time
FROM pg_stat_activity as a
JOIN pg_stat_statements as st
ON a.usesysid = st.userid

通过这种方式,我可以获得事件用户以及他使用查询的位置,例如其负载等。但问题是当同一用户使用不同的 pid 连接时, 找到的查询将被复制到当时连接的每个用户 pid。

在pg_stat_activity中,它显示用户的数据处于事件状态,因此,如果他断开连接,他的数据就会丢失(我用ETL解决了这个问题)。 但如果处于事件状态,如何防止它们被重复并获取用户使用的各自查询?

欢迎任何建议或文档。

最佳答案

不要加入他们。虽然您可以,但完全不清楚您希望通过这样做实现什么目标。如果您想知道现在正在加载什么系统,请使用 pg_stat_activity。如果您想了解一般情况下导致负载随时间变化的原因,请使用 pg_stat_statements。如果您想知道历史上哪些特定查询执行花费了很长时间,请使用 log_min_duration 设置 auto_explain ,然后将它们从日志文件中提取出来。

关于postgresql - 将 pg_stat_activity 与 pg_stat_statements 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68477211/

相关文章:

python - CS50:LIKE 运算符,使用 % 扩展进行变量替换

postgresql - SELECT 可以使用查询的结果来形成 PostgreSQL 中的表表达式吗?

postgresql密码验证失败

sql - 主机 "fe80::1%lo0"的 fatal error : no pg_hba. conf 条目

sql - 从函数 PostgreSQL 而不是记录返回多列和多行

sql - CTE - 使用更新的记录和 upsert 语句

SQL:如何选择组中同一行的两个字段?

ruby-on-rails-4 - Heroku +公寓PG::错误:错误:函数pg_stat_statements_reset()不存在

postgresql - pg_stat_statements 启用,但表不存在

postgresql - 如何删除 Postgres 扩展