
Era un passo che dovevamo fare. Ci è costato parecchio deciderci, anche se sapevamo che prima o poi ci avrebbe dato problemi, come infatti è finito per succedere.
Un paio di settimane fa, in un giorno qualsiasi, un processo quotidiano del programma di gestione del magazzino ci ha buttato giù il sito. Non è stato nulla di eccessivamente grave, visto che 20 secondi dopo il sito era di nuovo attivo e senza problemi, ma è stata la goccia che ha fatto traboccare il vaso e ci ha convinti a cambiare il motore delle tabelle di MySQL.
Il problema era che il motore predefinito in osCommerce, MyISAM, è decisamente più veloce nell’eseguire query di lettura, ma di contro blocca una tabella per tutto il tempo necessario a eseguire una query, e se è una tabella gigantesca con 135 query in coda in attesa di accedere a quella stessa tabella, abbiamo un problema e, di conseguenza, il sito si blocca. Una volta terminata la query “bloccante”, tutto torna alla normalità, ma… fino a quando? E peggio ancora: e se non fossimo lì ad accorgercene?
Così abbiamo deciso di tagliare la testa al toro e, su consiglio del responsabile dei nostri server, siamo passati a InnoDB. Per farlo abbiamo preparato una batteria di test e verifiche che abbiamo eseguito prima e dopo il cambio di motore sui nostri server locali e poi in preproduzione. Anche se c’era un rischio con le join tra tabelle, la loro enorme quantità nel nostro codice non ci permetteva di analizzarle una a una con attenzione; per questo abbiamo scelto di eseguire questa batteria di test, piuttosto completa, va detto.
Una volta verificato in preproduzione che tutto andava come previsto, tastiera in mano e occhi incollati allo schermo, alle 5:00 del mattino — quando ci sono appena visitatori — ci siamo fatti coraggio e abbiamo iniziato con il backup del database e subito dopo con il cambio del motore delle tabelle. Prima le più pesanti una per una e poi le più leggere in gruppo, per non penalizzare le prestazioni di quei pochi coraggiosi che a ore così improponibili fossero passati a farci visita. In poco più di un’ora e mezza avevamo già cambiato tutto e completato la batteria di test. Nessun errore, nessun inconveniente, nulla di strano. Strano, vero? E invece è vero: questa volta Murphy era dalla nostra parte.
I risultati ottenuti sono quelli attesi: nessun blocco delle tabelle, al prezzo di prestazioni leggermente peggiori nel 10% dei casi, cosa che speriamo di risolvere a breve dividendo in parti le due o tre tabelle mastodontiche che abbiamo. Tra qualche giorno — o settimana — vi racconterò anche com’è andata questa divisione. Vi invito a leggerlo allora, ma intanto vi lascio un paio di link per chi vuole approfondire l’argomento:
- http://www.arsys.info/programacion/myisam-o-innodb-elige-tu-motor-de-almacenamiento-mysql/
- http://dev.mysql.com/doc/refman/5.0/es/converting-tables-to-innodb.html
- http://stackoverflow.com/questions/7335515/migrating-from-myisam-to-innodb

Lascia un commento