是否可以从PL / PGSQL函数内部监视PostgreSQL服务器的性能?

问题描述

这听起来有些奇怪,因为我想以编程方式知道在服务器中执行大量写入的PL / PGsql函数是否是一个“好时机”。 “好时机”是指考虑一些有关负载水平,并发水平或其他任何级别的Postgresql服务器的直接或计算指标。

我知道那里有许多专门用于性能跟踪的高级应用程序,例如https://www.datadoghq.com。但是我只需要一个简单的内部KPI来更改或延迟执行这些繁重的过程,直到出现“更好的时刻”。

其中一些过程会清除表,一些会对数百万行进行平均值/求和计算,一些会检查远程表等。当并发用户压力下降时,它们可能会等待数分钟或数小时的“更好时机”。 / p>

有什么主意吗?

解决方法

您可以通过以下方式查看其他活跃的会话:

select count(*) from pg_stat_activity where state='active';

但是您必须是超级用户,或者具有pg_monitor角色,否则对于其他用户的会话,状态将为NULL。如果那让您感到困扰,则可以使用SECURITY DEFINER编写函数以允许访问此信息。 (无论如何,您可能都应该将其放入自己的函数中,这意味着除非您是唯一可用的语言,否则没有理由需要在plpgsql中实现它。)

您还可以通过使用适当特权的pl语言来调用任意操作系统操作。通过滥用COPY...FROM PROGRAMincludes from plpgsql