Nagiosスクリプトを使用してPostgresデータベース上のデータベース接続の数を監視しようとしたところ、この問題が発生しました。これらは現在開いている接続としてカウントされ、5分ごとに測定されます。
SELECT sum(numbackends) FROM pg_stat_database;
それでも、これは多数の短期間の接続を見逃しているようで、統計は現実とはかけ離れています。
スクリプトを手動で実行しようとすると、2つの接続が数秒離れた2つの接続間でも大きな変化が見られました。
この情報を信頼できる方法で取得するにはどうすればよいですか?時間間隔中に発生したmax(connectios)のような。
データベース接続と全体的な負荷をチェックするには、pgbadger
などのワークロード監視ツールを使用することをお勧めします。これは、どのユーザーがどのくらいの時間接続していて、どのクエリがユーザーによって起動されているかを理解するのに役立ちます。 pgbadgerのインストールと設定については、 this ページを参照してください。
アクティブな接続の数だけを確認したい場合は、select count(*) from pg_stat_activity where state='active'
を使用できます
これを行うには、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を介して更新する