servidor MySQL experimentando alta tensão / conexões máximas

1

O curto: Estamos atingindo o máximo de conexões e observando um desempenho muito ruim do MySQL durante o horário comercial de pico e não podemos determinar se é um problema de carga ou de configuração.

Longo: Para começar, veja nossas especificações de servidor hospedadas no Digital Ocean:

Núcleos: 20

Memória:

total de buff / cache compartilhado gratuito disponível Mem: 62G 48G 4.7G 216M 10G 14G

Snapshot do painel do MySQL WorkBench:

Painel do MySQL Workbench

Normalmente, temos mais de 200 entradas na lista de processos, quase todas "tabelas de abertura", "tabelas de fechamento" e, um pouco menos frequentes, "limpeza". As entradas de limpeza têm COMMAND killed e NULL INFO ( SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST ). As únicas consultas que realmente vemos demorando muito são alguns INSERTOS em tabelas com uso pesado, e comandos UPDATE com a chave primária no WHERE para tabelas com nós pesados. Seu estado é "atualização" na lista de processos.

configurações MySQL .cnf:

key_buffer_size=1G
myisam_sort_buffer_size=1073741824
max_length_for_sort_data=8388608
max_sort_length=8388608
sort_buffer_size=1073741824
join_buffer_size=1073741824
preload_buffer_size=1073741824
read_buffer_size=1073741824
read_rnd_buffer_size=1073741824
thread_cache_size=450
max_allowed_packet=100M
max_connections=400
lock_wait_timeout=50
wait_timeout=120
table_open_cache_instances=10
table_open_cache=6000
table_definition_cache=6000
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size=46G
innodb_buffer_pool_instances=46

Temos mais de 800 bancos de dados em nosso único servidor ativo e muitos milhares de usuários que usam um aplicativo que faz solicitações frequentes de servidor com várias atualizações de registros individuais ou inserções que precisam ser sincronizadas com vários usuários.

A pergunta:

Considerando as configurações de .cnf e as especificações do nosso servidor, em relação ao snapshot do painel do MySQL WorkBench, deveríamos estar tendo o tipo de lentidão / conexões que estamos vendo com essa configuração? Nós constantemente atingimos nosso Max Connections e recebemos SQLSTATE[HY000] [2002] Resource temporarily unavailable de erros no PHP do PDO.

Alguém tem alguma sugestão para melhorar o desempenho? Configurações de configuração diferentes? Conhecemos soluções de longo prazo, como colocar grandes clientes em servidores separados, entre outros - mas, a curto prazo, existe alguma maneira de otimizar nosso servidor? Nosso aplicativo e site são pouco utilizáveis durante as horas de ponta.

Estatística adicional:

Linux 4.0.4-301.fc22.x86_64     25/04/2016 _x86_64_ (20 CPU)

avg-cpu:% usuário% nice% system% iowait% steal% idle

8,51 0,01 0,67 0,28 0,35 90,18

Dispositivo: tps kB_read / s kB_wrtn / s kB_read kB_wrtn vda
269.78 1681.90 2180.52 37679232421 48849706700

    
por Pete_1 26.04.2016 / 00:49

1 resposta

0

Meu dinheiro está em "configuração" - mas provavelmente do jeito oposto que você antecipa ... Eu suspeito que você tenha configurado demais.

Parece-me que você tem "ajustado" o desempenho do seu servidor diretamente para o chão .

Se você estiver usando um script de "ajuste", pare de fazer isso.

Por exemplo ... table_definition_cache=6000 e table_open_cache=6000 ... qual é a justificativa para isso?

A maioria dos parâmetros que você configurou fora de seus padrões parece ser uma adivinhação.

A menos que você comparou cada dessas personalizações, individualmente, antes e depois de criá-las, individualmente ... bem, você provavelmente verá para onde estou indo ... elas provavelmente não são justificáveis, e você provavelmente ficará melhor sem eles. Maior nem sempre é melhor. Maior pode ser mais difícil de fazer malabarismos.

Eu esperaria boas coisas se você simplesmente comentasse quase todas essas configurações, exceto por innodb_* e deixasse o servidor executar com mais parâmetros com seus valores padrão.

    
por 26.04.2016 / 05:32

Tags