A importância da RAM é um fato estabelecido, mas muito menos material está disponível sobre a importância dos núcleos e multithreading quando se trata do uso da CPU pelo MySQL. Estou falando sobre a diferença de executar o MySQL em 4 núcleos vs 6 núcleos vs 8 núcleos e assim por diante.
Diferentes mecanismos de armazenamento usam a CPU de maneira diferente?
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:
MySQL apresenta o uso de vários mecanismos de armazenamento
Quanto aos mecanismos de armazenamento listados, os únicos que possuem conformidade com ACID são o InnoDB e o NDB. Por que isso é importante mencionar? Duas razões:
InnoDB no MySQL 5.5, Plugin InnoDB) 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). Na verdade, Percona injeta cerca de 30.000 linhas de código especificamente para aprimoramento de desempenho do InnoDB com cada nova versão GA do código-fonte do MySQL. Podemos ter certeza de que a Oracle incluiu seus próprios aprimoramentos de seu próprio think tank para rodar no InnoDB para operação multicore (desde o MySQL 5.1.38).
Com a necessidade de executar MVCC em dados em conjunto com bloqueio de linha/página, o desempenho da transação agora pode ser instrumentado, medido e configurado.
Se há uma coisa que aprendi sobre o uso de vários núcleos, é que você deve ajustar o InnoDB de forma eficaz e não apenas confiar no InnoDB pronto para uso .
ATUALIZAÇÃO 2011-09-20 08:03 EDT
Com relação ao InnoDB se beneficiar de todos os núcleos, precisamos manter as coisas em perspectiva. Os núcleos também devem atender a 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 de 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 atender apenas ao MySQL . Dada essa perspectiva, o InnoDB envolverá mais núcleos sem dúvida .
Quanto ao Plugin InnoDB, foi mencionado apenas para mostrar iniciativas anteriores para ter um InnoDB melhor por parte do MySQL (eh, Oracle. Desculpe, ainda não saiu da língua). Novas variáveis para convocar mais atividades centrais tornaram-se evidentes a partir do 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áxima sendo tão diferentes (4 - 64) mostram que o InnoDB é tão multithread e intensivo em núcleo quanto você o configura !!!
Atender às necessidades da comunidade MySQL para acessar mais núcleos com o InnoDB foi liderado por Percona. Consequentemente, o MySQL começou a seguir o exemplo. Eu tenho que admitir que a Oracle (eca) fez as melhorias necessárias para uma atividade mais central.
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 o cpu-scaling é quando o código de bloqueio interno ( mutexes ) tem contenção e bloqueia a execução simultânea de threads. Todos os mecanismos de armazenamento exigirão mutexes, mas certamente existem alguns quentes no MyISAM.
Se ignorarmos a contenção de mutex por um segundo e voltarmos à sua pergunta principal: quão importante é ter muitos núcleos? -
Gosto de ter muitos núcleos para cargas de trabalho que atendem a solicitações de usuários. Ter muitos pode reduzir a variação entre os tempos de consulta. Pense nisso como fazer fila no supermercado com 12 corredores abertos contra apenas 2.
Atualização : escrevi um post no blog sobre por que a escalabilidade vertical (multi-cores) é importante.