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.