Para "inserções simultâneas", o manual de referência do MySQL tem a seguinte explicação:
O mecanismo de armazenamento MyISAM suporta inserções simultâneas para reduzir a contenção entre leitores e escritores para uma determinada tabela: Se uma tabela MyISAM não tiver buracos no arquivo de dados (linhas excluídas no meio), uma instrução INSERT pode ser executada para adicionar linhas ao final da tabela ao mesmo tempo que as instruções SELECT estão lendo as linhas da tabela.
http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
Digamos que o parâmetro "inserção simultânea" do nosso banco de dados esteja definido como "Auto" (1).
E temos uma tabela MyISAM com um gap. Quando inserimos novas linhas e preenchemos essas lacunas, a tabela "imediatamente" se prepara para aceitar "inserções simultâneas" para futuras consultas de inserção?
Ou precisamos executar "OPTIMIZE" antes que a tabela saiba que não há lacunas?
Embora você possa fazer o que Rolando sugere e definir
concurrent_insert=2
para sempre habilitar inserções simultâneas, para responder à sua pergunta sobre o preenchimento de lacunas:Sim (grifo meu):
Isenção de responsabilidade: eu realmente não testei. Parece que, a menos que você tenha inserido exatamente o mesmo comprimento de dados nos orifícios, ainda haverá orifícios em algum lugar.
Você pode ver se há lacunas em uma consulta como esta (data_free=0 significaria ausência de lacunas):
Você provavelmente deve definir concurrent_insert como 2.
Primeiro, adicione isso a /etc/my.cnf
então reinicie o mysqld. Se você não puder reiniciar o mysqld, espere até um horário de pico e então execute
Fazer isso não deixa dúvidas de que as inserções simultâneas estão em operação.
Você sempre pode fazer
OPTIMIZE TABLE
durante uma janela real fora do pico.Se você preferir não mexer
concurrent_insert
, pode acelerar as coisas para o MyISAM por um custo. Qual custo?Por padrão, sempre que uma tabela MyISAM é criada, o formato da linha é Dinâmico. Se você correr
em todas as tabelas MyISAM, isso aumentará a E/S de leitura/gravação de 20 a 25% em cada MyISAM sem alterar mais nada. Mais uma vez, a que custo? A tabela dobrará de tamanho na maioria dos casos. Eu escrevi sobre este aprimoramento/compensação de desempenho do MyISAM antes: