Eu tenho um software que precisa fazer muitos INSERTs. No ambiente de produção, haverá alguns ajustes e testes sérios e coisas assim, mas agora, quando preciso testar, gostaria de acelerar as inserções o máximo possível. Daí a minha pergunta - existe uma maneira de ajustar o mysql de forma que ele não faça muita E/S de disco, mas mantenha tudo na RAM e raramente sincronize com o disco (como uma vez em n segundos, digamos?)
Responder1
Insert Delayed pode ajudar (apenas MyISAM), porque permite inserir em massa (que é para isso que MyISAM é bom).
O particionamento da sua mesa também ajudará.
Se sua memória permitir (e é isso que você está pedindo), você pode usar uma tabela de memória. Apenas certifique-se de que as configurações max_heap_table_size e tmp_table_size sejam suficientes para os dados.
Um pouco mais de truque, poderia ser (no Linux) usar TMPFS e colocar seu arquivo de dados lá (usando Symlinks)
Responder2
Veja a resposta do manual do MySQLaqui. Para responder à sua pergunta específica, verifique INSERT DELAYED
qual faz exatamente o que você deseja. Você pode ajustar seu comportamento com delayed_insert_limit
e delayed_queue_size
.
Porém, se você puder agrupar os INSERTs, isso poderá ser ainda mais rápido; use a ferramenta de inserção em massa ou forneça várias listas de VALORES, por exemplo:INSERT INTO table (column) VALUES (val1),(val2),(val3)
Responder3
como Daniel diz na segunda parte de sua resposta - as inserções em lote lhe darão muito. verificaresseapresentação. sua escala é provavelmente muito menor, mas acho que você achará interessante de qualquer maneira.