Postgresql
如何正確監控 PostgreSQL 數據庫連接數?
我嘗試使用 Nagios 腳本來監視 Postgres 數據庫上的數據庫連接數,但我遇到了這個問題:這些被計為目前打開的連接,並且每 5 分鐘測量一次。
SELECT sum(numbackends) FROM pg_stat_database;
儘管如此,這似乎錯過了大量的短期連接,因此統計數據與現實相去甚遠。
我嘗試手動執行腳本,我觀察到即使在兩個連接之間相距幾秒鐘的情況下也發生了很大變化。
我怎樣才能以可靠的方式獲得這些資訊?就像 max(connectios) 發生在一個時間間隔內。
最好使用工作負載監控工具,例如
pgbadger
檢查數據庫連接和整體負載。它將幫助您了解哪些使用者連接了多少時間以及他們正在觸發哪些查詢。有關安裝和配置 pgbadger 的資訊,請參閱此頁面。如果您只想檢查活動連接的數量,您可以使用
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 更新