如何正确监控PostgreSQL数据库连接数?

sor*_*rin 11 postgresql performance monitoring

我尝试使用 Nagios 脚本来监视 Postgres 数据库上的数据库连接数,但我遇到了这个问题:这些连接数被视为当前打开的连接数,每 5 分钟测量一次。

SELECT sum(numbackends) FROM pg_stat_database;
Run Code Online (Sandbox Code Playgroud)

尽管如此,这似乎错过了大量的短期连接,因此统计数据与现实相去甚远。

我尝试手动运行脚本,我观察到即使在两个连接之间发生了很大的变化,彼此之间的距离也只有几秒钟。

我怎样才能以可靠的方式获得这些信息?像 max(connectios) 发生在一个时间间隔内。

Rom*_*huk 0

您可以使用 local_preload_libraries 扩展来执行此操作。

像这样的东西:

#include "postgres.h"
#include <string.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

void _PG_init(void)
{
  SPI_connect();
  int ret = SPI_execute("UPDATE logon_logs SET logged = logged + 1", false, 0);
  SPI_finish();
}

/*
 * _PG_fini
 * Uninstall the hook.
 */
void _PG_fini(void)
{
}
Run Code Online (Sandbox Code Playgroud)

或者通过 NOTIFY 更新

  • 请尝试通过一些有关如何进行的解释来改进您的答案。 (6认同)