Quanta memória eu preciso para carregar uma tabela de 50GB + MySQL?

2

Eu tenho uma tabela MySQL com um arquivo .MYD de 44GB e um arquivo .MYI de 34GB. Estou executando scripts da linha de comando que analisam os dados nesta tabela. O MySQL não está maximizando a CPU, minha memória está no máximo, e o VMSTAT está relatando que os dados estão sendo trocados para o disco ... mas eu não estou muito familiarizado com este utilitário e seus relatórios.

Estou executando uma Instância do Amazon EC2 do High Memory Double XL. Tem 34GB de RAM. Eu não estou muito familiarizado com o MySQL tuning e o sistema está rodando com a instalação padrão no Linux CentOS.

A máquina atual tem memória suficiente para lidar com essa tabela de maneira eficiente? Com quais outras configurações eu preciso me preocupar? O maior sistema disponível para mim tem 68GB de memória. O que exatamente o MySQL está carregando na memória quando carrega uma tabela? Eu gostaria de ter uma melhor noção do que está acontecendo.

    
por T. Brian Jones 21.02.2012 / 20:11

2 respostas

2

Tenha em mente que o MyISAM não armazena em cache os dados do MyISAM. Apenas caches índices MyISAM.

O MyISAM Key Cache (dimensionado por key_buffer_size ) tem um tamanho máximo de 4 GB em sistemas de 32 bits. Você pode tornar o MyISAM Key Caches maior em sistemas de 64 bits.

Aqui está algo que pode ajudá-lo se você precisar armazenar em cache todo o arquivo .MYI:

Tente usar um MyISAM Key Cache dedicado.

Por exemplo, digamos que você tenha uma tabela MyISAM chamada mydb.mytable cujo arquivo .MYI seja 34 GB.

Veja como você configura um cache de chaves dedicado apenas para essa tabela:

SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34; 
CACHE INDEX mydb.mytable INTO my_dedicate_keycache; 
LOAD INDEX INTO CACHE mydb.mytable;

Este é um arquivo tão grande. Como você gostaria de carregá-lo quando o mysql inicia?

Crie um arquivo chamado /var/lib/mysql/startup_stuff.sql

cd /var/lib/mysql
echo "SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34;" > startup_stuff.sql
echo "CACHE INDEX mydb.mytable INTO my_dedicate_keycache;" >> startup_stuff.sql
echo "LOAD INDEX INTO CACHE mydb.mytable;" >> startup_stuff.sql

Em seguida, adicione isso ao /etc/my.cnf

[mysqld]
init_file=/var/lib/mysql/startup_stuff.sql

Finalmente, reinicie o mysql

service mysql restart
    
por 22.02.2012 / 21:13
2

Faça o download do sintonizador mysql e execute-o após tentar a importação. Ele informará quais configurações devem ser ajustadas em /etc/my.cnf 32 GB de RAM devem ser suficientes se você tiver definido seus índices corretamente.

    
por 21.02.2012 / 21:56