Como faço uma base de dados MySQL funcionar completamente em memória?

Reparei que o meu servidor de base de dados suporta o motor da Base de dados de memória. Eu quero fazer um banco de dados que eu já fiz correr InnoDB executar completamente em memória para o desempenho.

Como faço isso? Eu explorei o PHPMyAdmin, e não consigo encontrar uma funcionalidade de "motor de mudança".

Author: richarbernal, 2012-05-22

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.

 19
Author: PinnyM, 2018-01-26 13:55:30

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.

 14
Author: Jotschi, 2016-05-20 07:51:43
O motor de memória não é a solução que procuras. Você perde tudo o que você foi para uma base de dados para em primeiro lugar (ou seja, ácido). Aqui estão algumas alternativas melhores:
  1. 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.
  2. Certifica-te que as colunas que procuras têm índices. Use explicar para confirmar que eles estão sendo usados.
  3. 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.
  4. Denormalize o seu esquema, especialmente para ligações simples (isto é, obtenha o foid do barMap).
O último ponto é a chave. Eu adorava junções, mas depois tive de correr junções em algumas mesas com 100m+ filas. Não é bom. É melhor inserir os dados com os quais se vai juntar nessa tabela de destino (se não for demasiado) e consultar as colunas indexadas e obterá a sua consulta em alguns ms. Espero que aqueles ajudar.
 9
Author: Joseph Lust, 2012-05-21 21:16:04

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.

 6
Author: Kevin Bedell, 2012-05-21 21:12:46
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.
 4
Author: Seaux, 2014-05-23 20:01:07
No lugar do motor de armazenamento de memória, pode-se considerar o aglomerado MySQL. Diz-se que dar desempenho semelhante, mas para suportar a operação apoiada em disco para a durabilidade. Eu não tentei, mas parece promissor (e tem estado em desenvolvimento por um número de anos).

Você pode encontrar a documentação oficial do Grupo MySQL aqui.

 2
Author: Jice, 2013-09-24 23:04:13

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.

 0
Author: Mike Q, 2018-06-16 01:53:10