Connessione MySQL ad apertura molto lenta tramite MySQL Connector per .net

Sto cercando di risolvere il problema dei tempi di risposta molto lunghi da MySQL quando si apre una connessione usando il connettore MySQL per .net.

Ho installato MySQL 5.5 in esecuzione su una VM di Azure (Server 2008) con –skip-name-resolve e le restrizioni sull’host degli account utente del database utilizzano gli indirizzi IP. Sto utilizzando l’ultimo connettore MySQL per .net nel mio servizio WCF in esecuzione su Azure (nella stessa posizione Stati Uniti-Est, ho utilizzato una sottoscrizione di prova, nessun set di affinità). La mia stringa di connessione nel servizio WCF utilizza l’indirizzo IP interno della macchina virtuale che ospita MySQL come valore del parametro server. Ho anche “pooling = true; Min Pool Size = 2;” per ogni evenienza (ho provato anche senza questi parametri).

Quando si esegue il tracciamento del WCF, il tempo di risposta della query una volta eseguito il servizio e le richieste di elaborazione sono piuttosto buone (anche quando ogni risultato della query è univoco e quindi non memorizzato nella cache) e non ho problemi con le prestazioni di MySQL.

Ma l’enorme problema che non sono stato in grado di decifrare è il tempo necessario per ottenere la connessione a MySQL Open dopo che non sono state effettuate chiamate al database per circa 3 o 4 minuti . Se non vengono effettuate chiamate al database per alcuni minuti, occorrono 8 o 9 secondi o più per riaprire la connessione . Ho avvolto l’attuale “conn.open ();” con istruzioni trace prima e dopo la chiamata, e questo è il comportamento che sto vedendo registrato più e più volte dopo alcuni minuti di inattività.

Per inciso, ho anche provato (e sto tuttora usando) lo stile di gestione della connessione ‘using’ per garantire che MySQL Connector gestisca il pool di connessioni.

ad esempio: using (var conn = new MySqlConnection (Properties.Settings.Default.someConnectionString)) {… statement ..}

Mi sento come se avessi raggiunto un punto morto in questo modo, quindi ogni suggerimento sarebbe molto apprezzato.

Posso spiegare la tua domanda “il tempo necessario per ottenere la connessione a MySQL Open dopo che non sono state effettuate chiamate al database per circa 3 o 4 minuti. Se non vengono effettuate chiamate di database per alcuni minuti, occorrono 8 o 9 secondi o più per aprire nuovamente la connessione. “ perché succede:

I siti Web Windows Azure utilizzano il concetto di siti hot (attivi) e cold (inattivi) nei quali, se un sito Web non ha una connessione triggers, il sito va a stato freddo significa che il processo IIS host viene chiuso. Quando viene effettuata una nuova connessione a tali siti Web, sono necessari alcuni secondi per rendere il sito pronto e funzionante. Sebbene tu abbia un backend MySQL associato a questo sito web, ci vuole ancora un po ‘di tempo in più per ottenere il servizio richiesto, dato che il processo host di IIS impiega un po’ di tempo per iniziare. Questo è il motivo per cui dopo pochi minuti di attività il tempo di risposta è più lungo.

È ansible visualizzare la seguente presentazione per ulteriori dettagli sui siti Web Windows Azure Hot (attivo) e Cold (inattivo): http://video.ch9.ms/teched/2012/na/AZR305.pptx

In questo momento, non sono sicuro e non so come sia ansible mantenere i siti Web sempre caldi, anche se si passa a un sito Web condiviso o non è ansible. Cosa posso suggerirti di scrivere il tuo problema nel forum di Windows Azure WebSites e qualcuno di quel team ti fornirà una risposta appropriata.