使用 pg_stat_activity 中的“活动”进程测量 Postgres 中每个数据库的负载?

2024-01-03

我正在尝试测量同一 Postgres 服务器上的各种数据库所产生的负载,以确定如何最好地将它们拆分到多个服务器上。我设计了这个查询:

select
 now() as now,
 datname as database,
 usename as user,
 count(*) as processes
from pg_stat_activity
where state = 'active'
 and waiting = 'f'
 and query not like '%from pg_stat_activity%'
group by
 datname,
 usename;

但活动进程却出人意料地少!

据我运行查询的客户称,深入挖掘后,我运行了一个简单的查询,该查询返回 20k 行,花了 5 秒才完成。当我询问时pg_stat_activity在那段时间里,过程是idle!我重复了这个实验几次。

Postgres 文档说active means

后端正在执行查询。

and idle means

后端正在等待新的客户端命令。

它真的比这更微妙吗?为什么运行我的查询的进程没有active我什么时候登记入住的?

如果这种方法有缺陷,那么除了定期采样活动进程的数量之外,还有哪些替代方法可以在数据库粒度上测量负载?


您的期望active, idleand idle in transaction非常正确。我能想到的唯一解释是客户端显示数据的巨大延迟。所以查询确实在服务器上完成并且会话是idle但你没有看到客户的结果。

关于负载测量 - 我不会太依赖活动会话的数量。纯粹是运气好才能在活动状态下进行快速查询。例如,假设你可以检查pg_stat_activity每秒都会看到一个活动会话,但在测量之间,一个数据库被查询 10 次,另一个数据库被查询一次 - 但这些数字都不会被看到。因为他们在处决之间很活跃。而这个 10+1 活动状态(尽管意味着一个数据库被查询的频率增加了 10 倍)并不意味着您根本应该考虑加载 - 因为集群太多未加载,您甚至无法捕获执行。但这不可避免地意味着您可以捕获许多活动会话,但这并不意味着服务器确实已加载。

所以至少采取now()-query_start到您的查询以捕获更长的查询。或者甚至更好地节省一些经常查询的执行时间并测量它是否随着时间的推移而退化。或者更好的选择pid并检查该 pid 占用的资源。

顺便说一句,对于较长的查询,请查看 pg_stat_statements - 查看它们如何随时间变化可以给您一些关于负载如何变化的期望

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pg_stat_activity 中的“活动”进程测量 Postgres 中每个数据库的负载? 的相关文章

  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • 用数字 1-1000 填充 Postgres 数据库?

    我是 pgAdmin3 的新手 我想用数字 1 1000 填充 pgAdmin3 中的数据库 我该怎么做呢 目前 我创建了一个名为 MyDatabase 的数据库 其中没有任何内容 每行应与其数值相对应 第 1 行应包含 1 第 2 行应包
  • Ubuntu 12.04 上的 DeepDive 安装指南

    在拥有以后很多问题 https stackoverflow com questions 22469188 deepdive installation postgresql error安装深潜项目 http deepdive stanford
  • 为什么我的 postgis 不在几何字段上使用索引?

    Windows 上的 postgresql 9 5 postgis 2 2 我首先创建一个表 CREATE TABLE points id SERIAL ad CHAR 40 name VARCHAR 200 然后 添加一个几何字段 geo
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • Postgres LIMIT/OFFSET 奇怪的行为

    我正在使用 PostgreSQL 9 6 我有一个这样的查询 SELECT anon 1 id AS anon 1 id anon 1 is valid AS anon 1 is valid anon 1 first name AS ano
  • Postgres < 9.0 的 DO 块相当于什么

    Postgres 8 4 8 相当于什么 DO BEGIN IF NOT EXISTS THEN EXECUTE END IF END create function f returns void as BEGIN IF NOT EXIST
  • PostgreSQL - 根据另一个单元格值设置默认单元格值

    如果我有一个专栏说column a任何给定值 我想要另一列column b有一个default value根据 的值column a 换句话说 if column a peter then column b default value do
  • 如何计算 Postgres 上图表中所有连接的节点(行)?

    我的桌子有account id and device id One account id可以有多个device ids 反之亦然 我正在尝试计算每个连接的多对多关系的深度 Ex account id device id 1 10 1 11
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • postgresql 登录到另一个表时发生冲突

    我正在使用 PostgreSQL 9 5 并尝试使用批量插入每天插入数百万行 INSERT INTO tours as cst adults country id price VALUES 3 129 80 2 119 120 on con
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • 有哪些可用选项可以识别和删除 Postgres 中的无效对象(例如:损坏的索引)

    有哪些可用选项可以识别和删除 Postgres 中的无效对象 如果您指的是检测 无效 创建不良 索引 显然 Postgres 在尝试创建索引时可能会 失败 然后查询规划器将不会使用它们 尽管它们存在于您的系统中 此查询将检测 失败 索引 h
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • SELECT 在 PL/pgSQL 函数中引发异常

    我想在函数内实现循环 但收到此错误 ERROR 查询没有结果数据的目标 代码 CREATE OR REPLACE FUNCTION my function ill int ndx bigint RETURNS int AS DECLARE
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu

随机推荐