Como otimizar o MySQL Server para um melhor desempenho? [fechadas]

0

Recentemente eu tive que trabalhar com um sistema legado. Trabalhar com ele levou muito do meu tempo, porque muitas das tabelas não foram normalizadas corretamente. Devido a problemas de manutenção, é impossível mudar. Meu engenheiro sênior me disse para otimizar o servidor MySQL para melhor desempenho e velocidade.

Alterei meu arquivo C:\Program Files\MySQL\MySQL Server 5.6\my.ini para o seguinte:

key_buffer_size = 128M 30% of your memory (Max 4GB)
max_allowed_packet = 5M
table_open_cache = 256
sort_buffer_size = 10M
read_buffer_size = 20M
read_rnd_buffer_size = 10M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 30M
thread_concurrency = 8
bulk_insert_buffer_size = 256
innodb_buffer_pool_size = 5G  to 50% - 70% of your ram.
innodb_additional_mem_pool_size = 1G to to 10% of ram
innodb_log_buffer_size = 1G
innodb_log_file_size = 1G (Max 4GB) larger the file recovery slow.
innodb_file_per_table = 1

Funciona bem no começo. No entanto, depois de algumas horas eu não pude iniciar o MySQL e tive que reinstalar o MySQL Server.

O que eu fiz de errado e como posso corrigi-lo?

    
por pippi longstocking 25.10.2016 / 08:12

1 resposta

2

Apenas para obter alguma perspectiva do extrato do seu arquivo de configuração, fiz uma comparação com o valor padrão ( 1 , 2 . A notação terá o parâmetro seguido pelo seu valor e o valor padrão entre parênteses.

key_buffer_size = 128M (8M)
max_allowed_packet = 5M (4M)
table_open_cache = 256 (2000)
sort_buffer_size = 10M (2M)
read_buffer_size = 20M (1M)
read_rnd_buffer_size = 10M (2M)
myisam_sort_buffer_size = 64M (8M)
thread_cache_size = 8 (-1)
query_cache_size= 30M (0/1M)
thread_concurrency = 8 (10)
bulk_insert_buffer_size = 256 (8M)
innodb_buffer_pool_size = 5G (128M)
innodb_additional_mem_pool_size = 1G (8M)
innodb_log_buffer_size = 1G (8M)
innodb_log_file_size = 1G (5M)
innodb_file_per_table = 1 (Off/On)

Como podemos ver, você aumentou a maioria dos caches consideravelmente. Mas isso faz sentido? Você disse que seu banco de dados está usando o mecanismo InnoDB. De acordo com a documentação acima, key_buffer_size , read_buffer_size , bulk_insert_buffer_size se aplica somente aos bancos de dados MyISAM. Não tenho certeza de que espaços temporários estarão sendo executados.

O uso de myisam_sort_buffer_size parece invertido, especialmente porque a documentação declara: The size of the buffer that is allocated when sorting MyISAM indexes during a REPAIR TABLE or when creating indexes with CREATE INDEX or ALTER TABLE. Por isso, seria usado raramente na maioria dos casos de uso normal.

Além disso, você está usando as configurações a seguir, que parecem depender muito do padrão de uso do banco de dados max_allowed_packet , table_open_cache , thread_cache_size , innodb_log_buffer_size , mas você não disse nada sobre os padrões de uso. Portanto, considere a documentação acima para ver o que eles realmente fazem e compará-los com o padrão de uso do banco de dados.

Tenha em atenção que sort_buffer_size e read_rnd_buffer_size estão reservados por sessão. Alguns dos parâmetros MyISAM podem ser tão bons, então você realmente tem um pouco de sobrecarga para cada sessão. Novamente, você precisa avaliar o padrão de uso real.

Agora, para as configurações do InnoDB que você especificou. innodb_additional_mem_pool_size está obsoleto. Não está claro por que você modificaria innodb_log_file_size , innodb_file_per_table não tem certeza de qual poderia ser seu motivo para essa alteração. O último pode ser apenas o padrão de On ? Ao definir a configuração restante de innodb_buffer_pool_size para um valor tão alto, convém usar também innodb_buffer_pool_instances .

No geral, parece que você acabou de tentar algo e não funcionou. De acordo com seus comentários, você nem sequer olhou para os arquivos de log do MySQL para descobrir o que era responsável pelo serviço que não aceitasse conexões ou não aparecesse. Se você realmente quiser otimizar o desempenho do banco de dados, terá que fazer isso. Considere o uso de índices adicionais em tabelas nos quais é sensato aumentar o desempenho da consulta e observar quais consultas estão realmente sendo executadas no banco de dados. Além disso, tente entender o padrão de uso que o banco de dados tem em termos do número de conexões e do tamanho das consultas.

    
por 25.10.2016 / 11:41