web-dev-qa-db-ja.com

PostgreSQLデータベース接続の数を適切に監視するにはどうすればよいですか?

Nagiosスクリプトを使用してPostgresデータベース上のデータベース接続の数を監視しようとしたところ、この問題が発生しました。これらは現在開いている接続としてカウントされ、5分ごとに測定されます。

SELECT sum(numbackends) FROM pg_stat_database;

それでも、これは多数の短期間の接続を見逃しているようで、統計は現実とはかけ離れています。

スクリプトを手動で実行しようとすると、2つの接続が数秒離れた2つの接続間でも大きな変化が見られました。

この情報を信頼できる方法で取得するにはどうすればよいですか?時間間隔中に発生したmax(connectios)のような。

10
sorin

データベース接続と全体的な負荷をチェックするには、pgbadgerなどのワークロード監視ツールを使用することをお勧めします。これは、どのユーザーがどのくらいの時間接続していて、どのクエリがユーザーによって起動されているかを理解するのに役立ちます。 pgbadgerのインストールと設定については、 this ページを参照してください。

アクティブな接続の数だけを確認したい場合は、select count(*) from pg_stat_activity where state='active'を使用できます

1
Lohit Gupta

これを行うには、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)
{
}

または、代わりにNOTIFYを介して更新する

0
Roman Tkachuk