DBAtlas · Atlas d'exploitation des bases de données

Tempête de connexions (trop de connexions)

Vous avez obtenu 'too many connections', 'remaining connection slots reserved' ou ORA-00018 ; les nouvelles connexions sont rejetées. Trouvez la source, soulagez la pression tout de suite, corrigez durablement.

Mesurez la situation : combien de connexions, et combien sont actives ?

Regardez d'abord le total des connexions, la limite et la répartition actives/inactives.

SELECT status, COUNT(*) FROM v$session WHERE type='USER' GROUP BY status;
SELECT name, value FROM v$parameter WHERE name IN ('processes','sessions');
  • La plupart des connexions sont idle / idle in transaction
  • La plupart sont actives ; je dois trouver la source

Qui/d'où ? Regroupez les connexions par source

Généralement, le pool d'un seul serveur d'application a explosé ou il y a une fuite de connexions. Regardez la répartition par hôte/utilisateur/application.

SELECT client_addr, usename, application_name, count(*) FROM pg_stat_activity GROUP BY 1,2,3 ORDER BY 4 DESC;
  • Une seule application/un seul hôte a fait exploser les connexions (pool)
  • La charge a réellement augmenté ; toutes sont légitimes et actives

Cause racine : accumulation de connexions inactives / fuite

Des connexions sont ouvertes et jamais fermées, ou laissées 'idle in transaction' ; elles occupent des slots pour rien.

Cause racine : le pool de l'application a explosé

Le connection pool d'un serveur d'application est illimité/trop grand ou fuit. C'est lui qui produit les connexions.

Cause racine : réelle augmentation de charge

Les connexions sont légitimes et actives ; la capacité est réellement insuffisante.

Ouvrir dans DBAtlas →