Alta carga com baixo uso de CPU e baixo uso de IO no Solaris com ZFS e MySQL

1

Eu tenho um sistema Solaris 10 x86_64 executando o MySQL 5.5. Em tempos de uso intenso, estamos obtendo respostas muito lentas do banco de dados: consultas lentas sendo executadas em minutos, que normalmente retornam em sub-segundos. A utilização da CPU está na faixa de 60 a 70%. A média de carga chega regularmente aos 20 anos, raramente até os 40, e eu a vejo até os 50 anos. (Duas CPUs de quatro núcleos com HyperThreading habilitado.) Ele age como um problema de E / S, como se estivesse esperando que os discos gravassem, mas não vejo nenhum sinal de que haja algum problema real de E / S. Os tempos médios de espera do disco são consistentemente 0, as filas de espera médias estão no intervalo de 0,2-0,3 e as porcentagens de ocupações do disco ocasionalmente fluem para a área de 15%. (Tudo isso como de acordo com sar.)

O armazenamento é um zfs zpool de 5 espelhos zdev de duas unidades SAS. Eu não tenho um dispositivo de log de intenção, mas não vejo isso como um problema com essa carga de trabalho.

O que estou perdendo?

    
por wfaulk 18.09.2013 / 19:25

2 respostas

1

Queria dar-lhe uma resposta mais semelhante ao Solaris:

Em uma caixa multiprocessador / multicore, você não pode usar muito a carga da CPU. Inicialmente, use mpstat em vez de prstat / top se você quiser ver se um de seus núcleos ocasionalmente entra em plena utilização.

Se mpstat tiver 8 linhas de saída, significa que você tem 8 núcleos de CPU e, em seguida, qualquer processo que você vir em prstat consumindo mais de 12,5% dos recursos de CPU (100/8) provavelmente será vinculado à CPU. Para testar se isso é realmente assim, você pode usar prstat -L -p <pid> para ver se qualquer segmento individual desse processo atinge 12,5% porque você sabe com certeza que o processo está vinculado à CPU. Você tem alguns núcleos de CPU disponíveis em sua caixa, mas você deve sempre lembrar que qualquer thread de processamento único pode viver apenas em um núcleo de CPU. Para que o MySQL utilize sua caixa, torna-se uma questão de como é bom dividir o trabalho em vários threads. Se existe um único hot thread no MySQL, então sua máquina poderosa não ajuda muito.

Além disso, você pode encontrar algumas pessoas que aconselharão a desativar o Intel HyperThreading na carga de trabalho do servidor Linux / Solaris, porque ele realmente funciona melhor sem ele. YMMM Pelo que entendi, o Intel HyperThreading é excelente para o tipo de carga de trabalho da área de trabalho, mas para um servidor que só deveria fazer uma coisa e fazer isso com rapidez, isso pode prejudicar o desempenho.

Há pelo menos uma dúzia de rotas que você pode ir a partir daqui, por isso é um pouco difícil aconselhá-lo antes de ter mais fatos.

    
por 19.09.2013 / 14:28
0

Você menciona que a média de carga está regularmente nos 20s e às vezes nos 40s ou 50s. Então você menciona que tem 16 processadores disponíveis ((2cpus x 4 núcleos) x 2) então uma média de carga nos 20s significa que seus processos estão lutando pelo tempo de CPU e nos 40s ou 50s você tem uma grande quantidade de espera.

A utilização da CPU e a carga da CPU não são bem mapeadas juntas, mas eu esperaria ver uma utilização um pouco maior, a menos que as coisas não estejam sendo segmentadas corretamente.

Há outra postagem que explica bem a média de carga usando um cenário de tráfego em uma ponte:

Entendendo a carga da CPU no Linux

O curto é - em um mundo perfeito, sua média de carga nunca seria maior do que sua contagem de processadores (16 no seu caso).

É bem provável que o sistema esteja sendo sobrecarregado em vez de um problema do ZFS ou do MySQL.

** Editar, vejo que foi adicionado um comentário dizendo que você está vendo 100% de utilização da CPU. Isso também estaria alinhado aos processos que aguardam o tempo de CPU.

    
por 18.09.2013 / 22:07