Se há algo que posso dizer sobre o MySQL é que o InnoDB, seu mecanismo de armazenamento transacional (compatível com ACID), é de fato multithread. No entanto, é tão multithread quanto VOCÊ CONFIGURA !!! Mesmo "pronto para uso", o InnoDB tem um ótimo desempenho em um único ambiente de CPU, devido às configurações padrão. Para tirar proveito dos recursos de multithreading do InnoDB, lembre-se de ativar várias opções.
innodb_thread_concurrency define o limite superior do número de threads simultâneos que o InnoDB pode manter aberto. O melhor número de rodada definido para isso é (2 X Número de CPUs) + Número de Discos. ATUALIZAÇÃO : Como aprendi em primeira mão com a conferência Percona NYC, você deve definir isso como 0 para alertar o InnoDB Storage Engine para encontrar o melhor número de threads para o ambiente em que está executando.
innodb_concurrency_tickets define o número de encadeamentos que podem ignorar a verificação de simultaneidade com impunidade. Depois que esse limite é atingido, a verificação de simultaneidade de encadeamento se torna a norma novamente.
innodb_commit_concurrency define o número de transações simultâneas que podem ser confirmadas. Como o padrão é 0, não definir isso permite que qualquer número de transações seja confirmado simultaneamente.
innodb_thread_sleep_delay define o número de milissegundos que um encadeamento do InnoDB pode estar inativo antes de entrar novamente na fila do InnoDB. O padrão é 10000 (10 s).
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.
innodb_replication_delay impõe o atraso do encadeamento em um escravo quando innodb_thread_concurrency for atingido.
innodb_read_ahead_threshold permite leituras lineares do número definido de extensões (64 páginas [página = 16K]) antes de mudar para leitura assíncrona.
O tempo me escaparia se eu nomeasse mais opções. Você pode ler sobre eles na documentação do MySQL .
A maioria das pessoas desconhece esses recursos e está bastante satisfeita com o InnoDB apenas realizando transações compatíveis com ACID. Se você ajustar alguma dessas opções, fá-lo por sua própria conta e risco.
Eu joguei com várias instâncias de buffer pool do MySQL 5.5 (162 GB em 9 instâncias de buffer pools) e tentei particionar os dados automaticamente na memória dessa maneira. Alguns especialistas dizem que isso deve oferecer 50% de melhoria no desempenho. O que consegui foi uma tonelada de bloqueio de threads que realmente fez o InnoDB rastrear. Eu mudei para 1 buffer (162GB) e tudo estava bem novamente no mundo. Acho que você precisa de especialistas da Percona à sua disposição para definir isso. Estarei na Conferência MySQL da Percona em Nova York amanhã e perguntarei sobre isso se a oportunidade se oferecer.
Em conclusão, o InnoDB se comporta bem agora em um servidor com várias CPUs, considerando suas configurações padrão para operações multithread. Ajustá-los exige muito cuidado, muita paciência, ótima documentação e ótimo café (ou Red Bull, Jolt, etc.).
Bom dia, boa noite e boa noite !!!
ATUALIZAÇÃO 27-05-2011 20:11
Voltei da conferência Percona MySQL em Nova York na quinta-feira. Que conferência. Aprendi bastante, mas recebi uma resposta sobre o InnoDB. Fui informado por Ronald Bradford que definir innodb_thread_concurrency como 0 permitirá ao InnoDB decidir o melhor curso de ação internamente com simultaneidade de thread. Vou experimentar isso ainda mais no MySQL 5.5.
UPDATE 2011-06-01 11:20
No que diz respeito a uma longa consulta, o InnoDB é compatível com ACID e funciona muito bem usando o MultiVersion Concurrency Control . As transações devem ser capazes de transportar níveis de isolamento (leituras repetíveis por padrão) que impedem que outras pessoas acessem dados.
Quanto aos sistemas com vários núcleos, o InnoDB percorreu um longo caminho. No passado, o InnoDB não apresentava bom desempenho em um ambiente multicore. Lembro-me de ter que executar várias instâncias mysql em um único servidor para obter os múltiplos núcleos para distribuir os vários processos mysqld pelas CPUs. Isso não é mais necessário, graças à Percona e, mais tarde, ao MySQL (eh, Oracle, dizendo que isso ainda me deixa louco), pois eles desenvolveram o InnoDB em um mecanismo de armazenamento mais maduro que pode acessar os núcleos com simplicidade sem muito ajuste. A instância atual do InnoDB hoje pode operar bem em um único servidor núcleo.