Multi cores e desempenho do MySQL

38

A importância da RAM é um fato estabelecido, mas muito menos material está disponível sobre a importância dos núcleos e do multithreading quando se trata do uso da CPU pelo MySQL. Eu estou falando sobre a diferença de executar o MySQL em 4cores vs 6cores vs 8cores e assim por diante.

Os diferentes mecanismos de armazenamento usam a CPU de maneira diferente?

Rick James
fonte
está relacionado, mas não aborda o comportamento de diferentes mecanismos de armazenamento em relação a CPUs com vários núcleos.
Rick James
1
De fato. É por isso que não há voto "próximo como duplicado" ...
gbn
Esta é uma comunidade maravilhosa, ainda estou aprendendo a usar este site.
Rick James
Oi amigo, dê uma olhada aqui: mysql-cluster-blog.com você encontra pelo menos alguma coisa #

Respostas:

30

Quando se trata do MySQL, não há comparação entre os mecanismos de armazenamento, exceto que ele se enquadra em duas categorias básicas:

O MySQL possui o uso de vários mecanismos de armazenamento

Quanto aos mecanismos de armazenamento listados, os únicos que têm conformidade com ACID são o InnoDB e o NDB. Por que isso é importante mencionar? Duas razões:

  • Outros mecanismos de armazenamento simplesmente não são beneficiados com a presença de mais núcleos, exceto E / S básica de disco, uso da CPU e taxa de transferência geral.
  • O código para cada mecanismo de armazenamento não transacional, que determina basicamente 14 operações internas, independentemente do mecanismo de armazenamento, não foi projetado para alavancar o acesso a vários núcleos.

O InnoDB no MySQL 5.5, o InnoDB Plugin) e o XtraDB do Percona Server têm opções que você pode definir para acessar vários núcleos (o Percona Server faz isso há mais tempo). De fato, a Percona injeta cerca de 30.000 linhas de código especificamente para melhorar o desempenho do InnoDB a cada nova versão GA do código-fonte do MySQL. Podemos ter certeza de que a Oracle incluiu seus próprios aprimoramentos em seu próprio think tank para executar no InnoDB para operação multicore (desde o MySQL 5.1.38).

Com a necessidade de executar o MVCC nos dados em conjunto com o bloqueio de linhas / páginas, o desempenho da transação agora pode ser instrumentado, medido e configurado.

Se há uma coisa que aprendi sobre o uso de múltiplos núcleos, é que você deve ajustar o InnoDB de forma eficaz e não confiar apenas no InnoDB imediatamente .

UPDATE 2011-09-20 08:03 EDT

Com relação ao InnoDB se beneficiando de todos os núcleos, precisamos manter as coisas em perspectiva. Os núcleos também devem cuidar de outros assuntos (SO, disco, memória, aplicativos, monitoramento etc.) no servidor de banco de dados. Para aqueles com orçamentos modestos, muitos tendem a ter um servidor de banco de dados que também fornece NFS, monitoramento da Munin, suporte a aplicativos para JBoss, PHP e a lista continua. Se você deseja que o MySQL, mais especificamente o InnoDB, use mais núcleos, o servidor de banco de dados deve ser dedicado exclusivamente ao MySQL e o SO / disco / memória deve tender apenas ao MySQL . Dada essa perspectiva, o InnoDB envolverá mais núcleos sem dúvida .

Quanto ao InnoDB Plugin, foi mencionado simplesmente para mostrar iniciativas anteriores para ter um InnoDB melhor por parte do MySQL (eh, Oracle. Desculpe, ainda não saiu do lugar ainda). Novas variáveis ​​para convocar mais atividades principais tornaram-se evidentes no MySQL 5.1.38.

Por exemplo, innodb_read_io_threads e innodb_write_io_threads (ambos desde o MySQL 5.1.38) alocam o número especificado de threads para leituras e gravações. O padrão é 4 e o máximo é 64. As configurações padrão e máximo são tão diferentes (4 - 64) mostram que o InnoDB é tão multithread e intensivo quanto o núcleo que você o configura !!!

O atendimento das necessidades da comunidade MySQL de acessar mais núcleos com o InnoDB foi liderado pela Percona. Consequentemente, o MySQL começou a seguir o exemplo. Eu tenho que admitir que a Oracle (eca) fez as melhorias necessárias para mais atividades principais.

RolandoMySQLDBA
fonte
O InnoDB no MySQL 5.5 ajustado como sugerido acima pode se beneficiar de todos os núcleos? {pouco confuso sobre o plug-in InnoDB}
Rick James
@Rick - Além disso abordados seu comentário na minha resposta
RolandoMySQLDBA
Aqui parece ser uma história completamente diferente, e o MyISAM parece não dar certo quando se trata de utilizar vários núcleos, mas do outro lado em dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb O MyISAM possui vantagens. Portanto, parece ser um empate para decidir qual caminho seguir.
Rick James
2
Tudo depende do objetivo que você tem ao usar o MyISAM ou o InnoDB. O que e quanto você está disposto a armazenar em cache? Você confia no MySQL ou em outros mecanismos de cache (como verniz e memcached) para recuperação de dados? Seu hardware está dimensionado corretamente para o InnoDB? 98% dos seus SQL SELECTs? A tabela está no melhor formato para leituras de alta velocidade? Responder a essas perguntas com antecedência deve nos guiar quanto à seleção do mecanismo de armazenamento, configuração apropriada, seleção de hardware, chegando até a coisas mais profundas, como alta disponibilidade, topologia de banco de dados, divisão de leitura / gravação, e essa lista pode continuar.
RolandoMySQLDBA
9

Acho que falar sobre mecanismos de armazenamento usando núcleos pode ser enganoso para iniciantes. Desde que um programa seja suficientemente multiencadeado, o sistema operacional o agendará no maior número possível de núcleos.

O problema específico que limita a escalabilidade da CPU é quando o código de bloqueio interno ( mutexes ) tem contenção e impede que os threads sejam executados simultaneamente. Todos os mecanismos de armazenamento exigirão mutexes, mas certamente existem alguns populares no MyISAM.

Se ignorarmos a disputa por mutex por um segundo e voltarmos à sua pergunta principal: qual a importância de ter muitos núcleos? -

Gosto de ter muitos núcleos para cargas de trabalho que atendem a solicitações voltadas ao usuário. Ter muitos pode reduzir a variação entre os tempos de consulta. Pense nisso como se alinhar no super mercado com 12 corredores abertos versus apenas 2.

Atualização : escrevi uma postagem no blog sobre por que a escalabilidade vertical (múltiplos núcleos) é importante.

Morgan Tocker
fonte
5
+1 por mencionar o elefante na sala: contenção de mutex
cerd 11/11/14