コネクションストーム (接続数過多)
'too many connections'、'remaining connection slots reserved'、または ORA-00018 が発生し、新しい接続が拒否されている。発生源を特定し、今すぐ負荷を緩和し、恒久的に修正する。
状況を測定する: 接続数はいくつで、そのうちアクティブなものはいくつか?
まず合計接続数、上限、アクティブ / アイドルの内訳を確認する。
SELECT status, COUNT(*) FROM v$session WHERE type='USER' GROUP BY status;
SELECT name, value FROM v$parameter WHERE name IN ('processes','sessions');- ほとんどの接続が idle / idle in transaction
- ほとんどがアクティブ。発生源を特定する必要がある
誰が / どこから? 接続を発生源別にグループ化する
通常は、単一のアプリケーションサーバーのプールが膨れ上がったか、接続リークがある。ホスト / ユーザー / アプリケーション別の分布を確認する。
SELECT client_addr, usename, application_name, count(*) FROM pg_stat_activity GROUP BY 1,2,3 ORDER BY 4 DESC;- 単一のアプリケーション / ホストが接続を膨れ上がらせた (プール)
- 負荷が実際に増加した。すべて正当でアクティブ
根本原因: アイドル接続の蓄積 / リーク
接続が開かれたまま閉じられない、または 'idle in transaction' のまま放置されており、無駄にスロットを占有している。
根本原因: アプリケーションのプールが膨れ上がった
アプリケーションサーバーのコネクションプールが無制限 / 大きすぎる、またはリークしている。接続を生み出しているのはそのサーバーである。
根本原因: 実際の負荷増加
接続は正当でアクティブであり、容量が実際に不足している。