DBAtlas · データベース運用アトラス

コネクションストーム (接続数過多)

'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' のまま放置されており、無駄にスロットを占有している。

根本原因: アプリケーションのプールが膨れ上がった

アプリケーションサーバーのコネクションプールが無制限 / 大きすぎる、またはリークしている。接続を生み出しているのはそのサーバーである。

根本原因: 実際の負荷増加

接続は正当でアクティブであり、容量が実際に不足している。

DBAtlas で開く →