Vai al contenuto

Lezione appresa #500: Gestione delle perdite di connessione e dell’esecuzione delle query con HikariCP

Scopriamo come gestire le perdite di connessione e l’esecuzione delle query utilizzando HikariCP, un popolare pool di connessioni per database in Java.

Una delle lezioni apprese riguarda l’uso di HikariCP, un popolare pool di connessioni per database in Java. Durante l’attivazione della funzione setLeakDetectionThreshold su un servizio, abbiamo riscontrato il seguente messaggio di errore: “Connection leak detection triggered for ConnectionID:1 ClientConnectionId: b9b5344d-f970-XXX-xxxxxxxxxx on thread main, stack trace follows java.lang.Exception: Apparent connection leak detected at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)”.

La lezione appresa in questo contesto è che, nel contesto della rilevazione delle perdite di connessione in HikariCP, non è solo la chiusura della connessione che conta, ma anche l’esecuzione della query e la gestione delle risorse associate. Una perdita di connessione si verifica quando una connessione viene acquisita dal pool ma non restituita, il che può includere la non corretta chiusura degli oggetti ResultSet e PreparedStatement, così come la connessione stessa. In questo caso, ho riscontrato una query che impiegava più tempo rispetto a questa impostazione.

Considerazioni per la rilevazione delle perdite

1. Esecuzione della query:

  • Se una query impiega molto tempo per essere eseguita, può apparire come una perdita se il tempo di esecuzione supera la soglia di rilevazione delle perdite configurata (leak-detection-threshold).
  • È importante ottimizzare le query per garantire che vengano completate in un lasso di tempo ragionevole.

2. Chiusura della connessione:

  • È fondamentale assicurarsi che la connessione venga chiusa dopo il suo utilizzo, indipendentemente dal fatto che la query sia stata eseguita con successo o meno.