2010-05-01 25 views
10

Qual è il vantaggio e lo svantaggio del timeout della connessione = 0?Durata connessione e durata connessione

E a che cosa serve Connection Lifetime = 0?

es

(Database=TestDB; 
port=3306; 
Uid=usernameID; 
Pwd=myPassword; 
Server=192.168.10.1; 
Pooling=false; 
Connection Lifetime=0; 
Connection Timeout=0) 

e che cosa è l'uso di pool di connessioni?

risposta

24

Il timeout indica per quanto tempo si attende una risposta da una richiesta prima di rinunciare. TimeOut = 0 significa che continuerai ad aspettare che la connessione si verifichi per sempre. Bene, immagino che se ti connetti a un server veramente lento, è normale che occorrano 12 ore per rispondere :-). Generalmente una brutta cosa. Vuoi mettere una specie di timeout ragionevole su una richiesta, in modo che tu possa realizzare che il tuo obiettivo è giù e andare avanti con la tua vita.

Durata connessione = la durata della connessione prima che venga uccisa e ricreata. Una vita di 0 significa mai uccidere e ricreare. Normalmente non è una brutta cosa, perché uccidere e ricreare una connessione è lento. Attraverso vari bug le connessioni potrebbero rimanere bloccate in uno stato instabile (come quando si hanno a che fare con strane transazioni a 3 vie) .. ma il 99% delle volte è bene mantenere la vita di connessione infinita.

Il pool di connessioni è un modo per gestire il fatto che la creazione di una connessione è molto lenta. Quindi, piuttosto che creare una nuova connessione per ogni richiesta, invece di avere un pool di dire, 10, connessioni premade. Quando ne hai bisogno, ne prendi in prestito uno, utilizzalo e ritorna. Puoi modificare la dimensione del pool per cambiare il modo in cui si comporta la tua app. Pool più grande = più connessioni = più thread che fanno cose alla volta, ma questo potrebbe anche sopraffare qualunque cosa tu stia facendo.

In sintesi:
ConnectionTimeout = 0 è male, lo rendono qualcosa di ragionevole come 30 secondi.
ConnectionLifetime = 0 va bene
ConnectionPooling = disabilitato è male, è probabile che desidera usarlo.

+0

Posso sapere se avete qualche idea su come questo errore è venuto fuori? 'Impossibile collegarsi a nessuno degli host MySQL specificati.' – Mark

+0

Il server non risponde. Potrebbe essere inattivo, non può essere aperto sulla porta destra, potrebbe essere un firewall, ecc. Servono ulteriori dettagli – bwawok

+1

Mi piace la descrizione più dettagliata di ConnectionLifetime quindi la documentazione di mysql. – Nicholi

7

So che questo è un thread vecchio, ma penso che sia importante indicare un'istanza in cui è possibile disabilitare Pool di connessioni o utilizzare Connection Lifetime.

In alcuni ambienti (specialmente quando si utilizza Oracle, o almeno nella mia esperienza) l'applicazione Web è progettata in modo che si colleghi al database utilizzando le credenziali dell'utente rispetto a una stringa di connessione fissa situata nel file di configurazione del server. In questo caso, l'abilitazione del pool di connessioni farà sì che il server crei un pool di connessioni per ciascun utente che accede al sito Web (vedere Pool Fragmentation). A seconda dello scenario, ciò potrebbe essere positivo o negativo.

Tuttavia, il pool di connessioni diventa un problema quando il server di database è configurato per interrompere le connessioni di database che superano un tempo di inattività massimo a causa del fatto che il server di database può interrompere le connessioni che possono ancora risiedere nel pool di connessioni. In questo scenario, la durata della connessione può rivelarsi utile per eliminare queste connessioni poiché sono state comunque chiuse dal server.