
Era um passo que tínhamos de dar. Custou-nos bastante decidir, apesar de ser algo que sabíamos que mais cedo ou mais tarde nos iria dar problemas, como acabou por acontecer.
Há algumas semanas, num dia qualquer, um processo habitual do programa de gestão de armazém deitou o site abaixo. Não foi nada excessivamente grave, já que 20 segundos depois o site estava novamente ativo e sem problemas, mas foi a gota de água que nos levou a mudar o motor das tabelas de MySQL.
O problema era que o motor que vem por defeito no osCommerce, MyISAM, é bastante mais rápido ao realizar consultas de leitura, mas, por outro lado, bloqueia uma tabela durante o tempo que demora a executar uma consulta, e se for uma tabela gigantesca com 135 consultas em fila à espera de aceder a essa mesma tabela, temos um problema e, como consequência, o site bloqueia. Depois de matar a consulta “bloqueadora”, tudo volta à normalidade, mas… até quando? E pior ainda: e se não estivermos lá para perceber?
Assim, decidimos cortar o mal pela raiz e, por recomendação do responsável pelos nossos servidores, passámos a usar InnoDB. Para isso, preparámos uma bateria de testes e verificações que executámos antes e depois da mudança de motor nos nossos servidores locais e depois em pré-produção. Apesar de haver risco nas junções entre tabelas, a quantidade imensa delas no nosso código não nos permitia analisá-las uma a uma com detalhe, motivo pelo qual optámos por executar esta bateria de testes, bastante completa, diga-se.
Depois de confirmar em pré-produção que tudo corria como esperado, teclado na mão e olhos bem colados ao ecrã, às 5:00 da manhã — quando quase não há visitantes — enchemo-nos de coragem e começámos pelo backup da base de dados e imediatamente a seguir pela mudança do motor das tabelas. Primeiro as mais pesadas, uma a uma, e depois as mais leves em grupo, para não penalizar o desempenho daqueles poucos corajosos que andassem a horas tão impróprias a fazer-nos uma visita. Em pouco mais de uma hora e meia já tínhamos tudo alterado e a bateria de testes executada. Nenhum erro, nenhum inconveniente, nada estranho. Estranho, não é? Pois é verdade: desta vez Murphy esteve do nosso lado.
Os resultados que obtivemos são os esperados: nenhum bloqueio de tabelas à custa de um desempenho um pouco pior em 10% dos casos, algo que esperamos resolver em breve dividindo em partes as duas ou três tabelas mastodônticas que temos. Dentro de alguns dias — ou semanas — também vos contarei como correu essa divisão. Recomendo que o leiam nessa altura, mas entretanto deixo-vos alguns links para quem quiser aprofundar o tema:
- 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

Deixe um comentário