Como faço uma base de dados MySQL funcionar completamente em memória?
7 answers
Assumindo que compreende as consequências de usar o motor de memória como mencionado nos comentários, e aqui, assim como algumas outras que irá encontrar ao procurar (sem segurança da transacção, problemas de bloqueio, etc) - pode proceder do seguinte modo:
As tabelas de memória são armazenadas de forma diferente do InnoDB, por isso terá de usar uma estratégia de exportação/importação. Primeiro descarregue cada tabela separadamente para um ficheiro usando SELECT * FROM tablename INTO OUTFILE 'table_filename'
. Criar a base de dados de memória e recriar as tabelas que você estará usando com isso sintaxe: CREATE TABLE tablename (...) ENGINE = MEMORY;
. Você pode então importar seus dados usando LOAD DATA INFILE 'table_filename' INTO TABLE tablename
para cada tabela.
Também é possível colocar o directório de dados MySQL num tmpfs , acelerando assim as chamadas de escrita e leitura da base de dados. Pode não ser a maneira mais eficiente de fazer isso, mas às vezes você não pode apenas mudar o motor de armazenamento.
Aqui está a minha entrada fstab para o meu directório de dados MySQL
none /opt/mysql/server-5.6/data tmpfs defaults,size=1000M,uid=999,gid=1000,mode=0700 0 0
Eu também escrevi um post que explica a configuração em mais detalhes. Eu uso Esta configuração para a base de dados teste.
Http://jotschi.de/2014/02/03/high-performance-mysql-testdatabase/
Também poderá querer dar uma vista de olhos à configuração innodb_flush_log_ at_trx_ commit=2. Talvez isto acelere suficientemente o teu MySQL.
Innodb_flush_log_ at_ Trx_ commit altera o comportamento de descarga do disco mysql. Quando configurado para 2 ele só irá lavar o buffer a cada segundo. Por padrão cada inserção irá causar um flush e, assim, causar mais carga IO.
- não use junções - muito poucos grandes aplicativos fazem isso (I. E. Google, Flickr, NetFlix), porque é uma porcaria para grandes conjuntos de junções. Certifica-te que as colunas que procuras têm índices. Use explicar para confirmar que eles estão sendo usados.
- utilize e aumente o seu pedido e espaço de memória para os seus índices para obtê-los na memória e armazenar pesquisas frequentes.
- Denormalize o seu esquema, especialmente para ligações simples (isto é, obtenha o foid do barMap).
Se a sua base de dados for suficientemente pequena (ou se adicionar memória suficiente) a sua base de dados irá funcionar efectivamente na memória, uma vez que os seus dados serão armazenados em cache após o primeiro pedido.
Mudar as definições da tabela de bases de dados para usar o motor de memória é provavelmente mais complicado do que você precisa.Se você tem memória suficiente para carregar as tabelas na memória com o motor {[[0]}, você tem o suficiente para sintonizar as configurações do innodb para cache tudo de qualquer maneira.
Como faço isso? Eu explorei o PHPMyAdmin, e não consigo encontrar uma funcionalidade de "motor de mudança"."Em resposta directa a esta parte da sua pergunta, pode emitir um {[[0]}e irá recriar a mesa no motor adequado.
Você pode encontrar a documentação oficial do Grupo MySQL aqui.
Pensamentos adicionais:
A configuração do Ramdisk que o MySQL usa como disco RAM, é muito fácil de configurar.
O servidor Memcache-memcache é fácil de configurar, use-o para armazenar os resultados das suas consultas por um período de tempo X.