Eu tenho um aplicativo da web de gravação intensiva e comprei um VDS com 768 MB de RAM
- Este my.cnf é bom para meus propósitos?
Eu especifiquei bulk_insert_buffer_size para 126M e alguns outros parâmetros como abaixo:
[mysqld]
bulk_insert_buffer_size=126M
set-variable = max_connections=500
safe-show-database
max_user_connections=200
key_buffer_size = 16M
query_cache_size = 50M
tmp_table_size = 50M
max_heap_table_size = 200M
thread_cache_size = 4
table_cache = 80
thread_concurrency = 8
innodb_buffer_pool_size = 100M
innodb_log_file_size = 25M
query_cache_limit = 50M
innodb_flush_log_at_trx_commit = 2
Isso depende da quantidade de dados do MySQL e de quais mecanismos de armazenamento você está usando
Quando se trata de MyISAM e InnoDB, eles armazenam em cache de forma diferente. Escrevi um post sobre isso em 14 de abril de 2011 .
Como sua máquina tem apenas 768M de RAM, você deve fazer um bom ato de equilíbrio, dependendo de qual mecanismo de armazenamento está usando mais.
Todos MyISAM
Execute esta consulta
Consulta #1
Esta consulta informará o tamanho de um MyISAM Key Buffer que seus dados precisam em MB. Obviamente, a quantidade de RAM instalada tem precedência, portanto, use o bom senso. Você deve executar esta consulta:
Consulta #2
Se o DataToIndexRatio for menor que 3, examine todos os índices. Você pode ter índices muito grandes ou apenas muitos índices. Se você remover todos os índices não utilizados, isso aumentará o DataToIndexRatio e você poderá executar a Consulta nº 1 e obter uma recomendação menor. Mais uma vez, usei o bom senso, pois você só tem 768M. Pessoalmente, eu não ultrapassaria 256M. Portanto, você deve escolher 256M ou o resultado da Consulta #1, o que for menor.
Se você não tem nenhum dado InnoDB, você adicionou isso ao my.cnf (my.ini)
e reinicie o mysql. Dessa forma, o mysqld inicializará mais rápido porque não precisará verificar a recuperação de falha do InnoDB.
Você mencionou que seu aplicativo é de gravação intensiva. Uma mistura de INSERTs, UPDATEs e DELETE causará a fragmentação da tabela e do índice rapidamente. Se este for o caso, você precisa converter o formato de linha das tabelas MYiSAM para Fixo. Por quê?
O livro MySQL Database Design and Tuning recomenda o uso
ROW_FORMAT=FIXED
nas páginas 72,73. Isso converterá internamente todos os campos VARCHAR em CHAR. Isso tornará a tabela MyISAM maior, mas SELECTs executados contra ela serão muito mais rápidos. Eu posso atestar isso pessoalmente. Certa vez, tive uma mesa com 1,9 GB. Eu mudei o formato comALTER TABLE tblname ROW_FORMAT=FIXED
. A tabela acabou 3,7 GB. A velocidade dos SELECTs contra ele foi 20-25% mais rápida sem melhorar ou alterar mais nada.Todos InnoDB
Execute esta consulta
Consulta #3
Esta consulta informará o tamanho de um Buffer Pool InnoDB que seus dados e índices precisam em MB. Obviamente, a quantidade de RAM instalada tem precedência, portanto, use o bom senso. Você deve executar a Consulta nº 2 e aplicar a mesma regra DataToIndexRatio ainda mais rigorosamente porque os índices secundários no InnoDB tendem a ser mais inchados do que suas contrapartes MyISAM.
Se você estiver executando o MySQL 5.5, ajuste o InnoDB para engajamento de várias CPUs:
Como você tem apenas 768 MB de RAM, recomendo novamente 256 MB para innodb_buffer_pool_size ou o resultado da Consulta nº 3, o que for menor.
Você deve redimensionar os buffers de log do InnoDB. Por exemplo, se o innodb_buffer_pool_size escolhido for 256M, você precisará redimensionar os arquivos de log para 25% desse número, 64M assim:
PASSO 01) Desligue o mysql
service mysql stop
para Linuxnet stop mysql
para WindowsPASSO 02) Deletar ib_logfile0 e ib_logfile1
PASSO 03) Adicione isso ao my.cnf (my.ini)
PASSO 04) Inicialize o mysql (arquivos de log são recriados para o novo tamanho)
service mysql start
para Linuxnet start mysql
para WindowsInnoDB e MyISAM misturados
Eu aplicaria as regras acima e dividiria 128 MB para key_buffer_size e 128 MB para innodb_buffer_pool size .
RESUMO
Eu escolho 256M porque, independentemente do Storage Engine Mix que você possui, você tem um aplicativo de gravação intensiva. Você precisará fazer um bom cache para InnoDB, bem como índices MyISAM.
Por outro lado, reservo apenas 256 MB de um ou ambos os mecanismos de armazenamento porque o sistema operacional precisará do máximo de RAM possível para os seguintes aspectos:
Divirta-se configurando todos esses aspectos!!!