Che cos’è il pool di connessioni?

Pool di connessioni è il termine per la gestione delle connessioni degli utenti che effettuano query sui database. Sebbene molti utenti possano non notarlo, quando c’è un gran numero di utenti che cercano l’accesso a un server delle applicazioni su cui risiede un database, l’enorme volume di connessioni può diventare quasi impossibile per un server mantenere una buona connessione con tutte le connessioni a questi tempi. L’ingegneria del software che consente il pool di connessioni consente a un server di gestire bene le connessioni indipendentemente dall’elevato volume di connessioni che effettuano query e consente di rispondere a queste query con velocità inferiori al secondo.

Le connessioni devono essere di configurazione identica per essere incluse in un pool di connessioni, quindi la maggior parte dei programmi di pool di connessioni del server ha diversi pool di connessioni in esecuzione contemporaneamente. Quando un utente cerca di connettersi, viene assegnato a un pool con configurazioni simili, se lo spazio è disponibile. Se non c’è spazio disponibile, la richiesta viene messa in coda per essere assegnata non appena si rende disponibile. Un utente potrebbe non essere consapevole di essere in una coda, ma potrebbe semplicemente notare che il database sembra lento nella risposta alla query; tuttavia, nel back office dei sistemi di gestione del database, viene eseguita la scansione dei pool per trovare spazio affinché l’utente possa trovare una connessione aperta. La maggior parte dei programmi di pool di connessioni dispone di un elenco di utenti massimi per pool e di impostazioni temporali minime per le quali una connessione può rimanere inattiva prima che venga interrotta e la disponibilità venga restituita al pool.

Alla creazione di un pool di connessione, viene creato e aggiunto un certo numero di oggetti di connessione al pool. Affinché un pool sia considerato attivo, è necessario un numero minimo di oggetti. Questi oggetti di connessione sono le postazioni di disponibilità che collegano una connessione al pool e possono essere creati e aggiunti al pool in base alle esigenze fino al massimo consentito all’interno di un pool. Poiché gli utenti sono soddisfatti della loro interrogazione e rilasciano il loro oggetto di connessione, gli oggetti vengono restituiti al pool dai programmi di pool di connessioni per essere utilizzati da un altro utente o dallo stesso utente quando ritorna.

Un fattore che può rallentare i tempi di risposta nel pool di connessioni è la cosiddetta frammentazione del pool. La frammentazione del pool di solito si verifica a causa della sicurezza integrata o di troppi database che risiedono su un insieme esistente di server. Un sistema di gestione del database che autentica gli utenti e poi li mette in coda o li assegna agli oggetti del pool di connessioni esistenti esaurisce la memoria e una progettazione del sistema più rigorosa per gli accessi spesso risolve il problema dei troppi database. La progettazione del sistema di sicurezza integrato dei programmi basati su Windows in molti programmi di pool di connessioni richiede che un solo utente basato su Windows risieda all’interno di un pool alla volta. Questo può essere risolto creando più pool per soddisfare richieste aggiuntive che devono essere risposte contemporaneamente.

Se il programma di pool di connessioni rileva che un utente è rimasto inattivo oltre un determinato periodo di tempo o la connessione è stata interrotta, restituirà l’oggetto di connessione al pool come oggetto non valido. Se un server si interrompe mentre è attiva una connessione, la connessione può ancora essere ritirata anche se il pool di connessioni non è a conoscenza della connessione interrotta. I programmi del pool di connessioni ActiveX di solito procedono quindi a cancellare il pool di queste connessioni quando il server viene riavviato.