PL / PGSQL関数内からPostgreSQLサーバーのパフォーマンスを監視することは可能ですか?
これはエキゾチックに聞こえるかもしれません。サーバーで大量書き込みのPL / PGSQL関数を実行するのが「良い瞬間」であるかどうかをプログラムで知りたいからです。「良い瞬間」とは、負荷レベル、同時実行レベル、またはPostgreSQLサーバーの他の大きさの直接または計算された指標について熟考することを意味します。
パフォーマンス追跡に特化した高度なアプリケーションがたくさんあることを私は知っています。 https://www.datadoghq.com。しかし、「より良い瞬間」が来るまで、これらの大量書き込みプロシージャの実行を変更または遅延させる単純な内部KPIが必要です。
これらの手順の中には、テーブルをパージするもの、数百万行の平均/合計計算を行うもの、リモートテーブルをチェックするものなどがあります。同時ユーザーのプレッシャーが低下すると、「より良い瞬間」を数分または数時間待つ場合があります。
何か案が?
回答
次のような方法で、アクティブな他のセッションの数を確認できます。
select count(*) from pg_stat_activity where state='active';
ただし、スーパーユーザーであるか、pg_monitorロールを持っている必要があります。そうしないと、他のユーザーのセッションの状態がNULLになります。それが気になる場合は、SECURITY DEFINERを使用して関数を記述し、この情報へのアクセスを許可することができます。(とにかく、これを独自の関数に入れる必要があります。つまり、使用できる唯一の言語でない限り、plpgsqlに実装する必要がある理由はありません。)
適切な特権を持つpl言語を使用して、任意のOS操作を呼び出すこともできます。それはplpgsqlが含まれるから悪用によって、COPY...FROM PROGRAM
。