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?
mysql
performance
Rick James
fonte
fonte
Respostas:
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:
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.
fonte
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.
fonte