Eu tenho um servidor mysql 5.1 com um banco de dados de aproximadamente 450 tabelas, ocupando 4 GB. A grande maioria dessas tabelas (todas menos 2) são MyIsam. Isso tem funcionado bem na maior parte (não precisa de transações), mas o aplicativo está ganhando tráfego e algumas tabelas foram afetadas devido ao bloqueio de tabelas nas atualizações. Essa é a razão pela qual 2 das tabelas são InnoDB agora.
A conversão nas tabelas menores (100k linhas) não demora muito, causando um tempo de inatividade mínimo. No entanto, algumas das minhas tabelas de rastreamento estão se aproximando de 50 milhões de linhas. Existe uma maneira de acelerar um ALTER TABLE...ENGINE InnoDB
em grandes tabelas? E se não, existem outros métodos para converter minimizando o tempo de inatividade nessas tabelas pesadas de gravação?
Deixe-me começar dizendo, eu odeio ALTER. É mau, IMHO.
Diga, este é o seu esquema de tabela atual -
Aqui está o caminho que eu recomendo -
Crie um novo objeto de tabela que substituirá o antigo:
Insira todas as linhas da tabela antiga por nome na nova tabela:
Smoke teste sua migração:
Troque os nomes das tabelas para que você possa manter um backup caso precise reverter.
Prossiga para o teste de regressão.
Essa abordagem se torna cada vez mais preferível com tabelas com vários índices e milhões de linhas.
Pensamentos?
1) A proteção contra perdas é uma função da paranóia. Sempre faça um backup. Se você é realmente paranóico, faça um backup e restaure a partir do backup.
2) Esta página do manual do MySQL contém instruções para converter tipos de tabelas.
3) O PostgreSQL faz pesquisa de texto completo , o Sphinx Engine parece fazer isso para o MySQL
É X vezes mais fácil otimizar todo o servidor (configuração de memória, caches, índices) quando você tem apenas um mecanismo usado. Misturar myisam com innodb em bancos de dados grandes sempre travará em algum ponto forçado por algum compromisso para que ambos os mecanismos funcionem bem (mas não excelentes :)
Eu recomendo que você se interesse por alguns mecanismos de pesquisa de texto completo dedicados, como sphinx , lucene ( solr ) e se livre deles da camada de banco de dados.