Un buon modo di programmare per chiudere una connessione MySQL di lunga durata e riaprirla a intervalli?

1

Sto eseguendo un'applicazione Java che crea 50 thread come parte di un threadpool; ogni thread in esecuzione in un oggetto che legge 1000 righe univoche alla volta da una tabella MySQL . Quindi ogni oggetto ha la sua classe SqlManager creata che può aprire una connessione Sql.

wait_timeout è 28800, che sarebbe 8 ore (sono sorpreso che sia così lungo), quindi presumo che una connessione una volta stabilita, non scadrà fino a 8 ore sono finite. Il mio programma funziona per oltre 8 ore e ho aumentato anche la variabile max_connections a 5000.

Attualmente ho programmato ciascun oggetto thread per verificare se sono trascorse 2 ore e, in caso affermativo, chiudere la connessione MySQL e riaprire la connessione.

Questa è una tecnica appropriata per affrontare il problema o la connessione scade solo se non è stata utilizzata per nessuna query per un lungo periodo? Il mio programma interroga costantemente il database in tutte quelle ore.

    
posta Nav 01.10.2016 - 16:15
fonte

2 risposte

2

Se il problema è che le funzioni di query / etc smettono di funzionare come hai disconnesso, scrivi il tuo wrapper del database e controlla le funzioni di query per controllare se il database è disconnesso, se lo è, tenta di riconnettersi e inserire la query in un array con altri da eseguire sulla connessione al database.

Se sei pigro, fallo semplicemente SELECT ogni ora o così e non dovrebbe scadere.

    
risposta data 01.10.2016 - 17:00
fonte
2

Usa il pool di connessioni, usalo come DataSource e ogni volta che vuoi fare una certa unità di lavoro, ottieni la connessione da quell'origine dati, fai quello che ti serve e chiudi quella connessione (non si chiuderà, verrà restituito al piscina).

Lasciare la manutenzione della connessione a lungo termine sul pool di connessioni (e se la tua applicazione è un'applicazione web / EE, puoi configurare quel pool sul server).

I pool di connessioni in genere possono controllare se la connessione è in buona salute (per esempio riavviare il database significa solo indisponibilità temporanea anziché da quel momento usando connessioni non valide), tenerlo in vita quando non utilizzato (ma è necessario tornare ad essa quando non si è effettivamente usando).

L'uso del pool di connessioni consente al tuo programma di concentrarsi su ciò che vuoi fare, invece di gestire da solo questi problemi.

tutorial sulla sorgente dati: link domanda sulle piscine: link

    
risposta data 05.10.2016 - 10:29
fonte

Leggi altre domande sui tag