Armazenamento WiredTiger do MongoDB não usando dois núcleos de CPU

3

Como afirmado na descrição do mecanismo de armazenamento WiredTiger, ele oferece uma capacidade de melhor concorrência devido ao bloqueio no nível do documento. De este post :

WiredTiger scales on modern, multi-CPU architectures. Using a variety of programming techniques such as hazard pointers, lock-free algorithms, fast latching and message passing, WiredTiger performs more work per CPU core than alternative engines.

Por algum motivo, meu caso de uso não parece se beneficiar disso. Eu tenho um banco de dados com muitas gravações simultâneas (principalmente atualizações), e esse tipo de carga não consegue superar o limite de 2000 atualizações por segundo. Aqui está a mongostat 10 output:

insert query update delete getmore command % dirty % used flushes  vsize    res qr|qw ar|aw netIn netOut conn     time
     3   780   1936    141      42     3|0     0.3    1.0       0 717.0M 289.0M   0|0   1|0  433k     6m  141 17:16:32

O rendimento do disco não está saturado, iostat -x 10 output:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.56    0.00   20.31    0.10    0.10   58.93

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
xvdb              0.00     5.80    0.00  102.50     0.00  6188.80    60.38     3.46   33.79   0.46   4.72

Dado tudo isso, presumo que o gargalo está no uso da CPU, que é sempre estável em 100% o tempo todo para mongod process no top (do total de 200%, o que significa que apenas uma CPU de dois é usada). 58% de tempo ocioso de iostat também confirma isso.

Existem métodos para determinar se o armazenamento do WiredTiger está usando o bloqueio em nível de documento e dois núcleos de CPU simultaneamente, como deveria ser? Ou isso poderia acontecer devido a qualquer outro motivo que não o limite de capacidade da CPU?

    
por artch 29.05.2015 / 19:37

3 respostas

1

As operações de gravação estão sendo executadas em série na instância de núcleo único. Operações de leitura têm concordância. Isto é o que eu entendi das minhas leituras até agora.

    
por 16.03.2016 / 10:12
0

Que tipo de configuração do cliente mongodb você tem e que tipo de hardware?

Na minha experiência de benchmarking de diferentes mecanismos de armazenamento mongodb em sistemas diferentes, uma única instância do mongodb pode atingir uma parede rapidamente em operações por segundo.

Pode ser devido a vários motivos, como um gargalo de largura de banda ou tempo de envio. Para descobrir se é hora de envio, você pode tentar executar duas instâncias de mongod lado a lado. Se ambos atingirem 2000 atualizações por segundo e usarem 1 CPU cada, é possível que o tempo que leva para o mongod despachar comandos de atualização seja maior que o tempo que o sistema leva para executar alguns dos comandos de atualização. Portanto, não haveria razão para o mongod usar o outro núcleo da cpu porque o primeiro está sempre pronto para a próxima atualização (mesmo que esteja no limite).

Se você ainda tiver 2000 atualizações / segundo no total e ainda usar apenas um núcleo entre elas, será um problema diferente, e eu precisaria ver mais informações sobre a configuração do seu sistema para adivinhar o que é.

    
por 07.07.2015 / 00:44
0

Se você quiser usar top , se mongoDB é o principal processador, você deve usar a opção 1 (pressione 1 após top iniciar) ou use um método alternativo conforme descrito aqui: Como medir o uso do núcleo da CPU separado para uma processo?

Para ferramentas mongo, isso depende da versão (as ferramentas mudaram de 2.x para 3.x, portanto, como usar ferramentas para exibir informações de bloqueio dependerá da sua versão), mas db.serverStatus() deve fornecer as informações que você ' está procurando. Veja Como vejo o status de bloqueios em minhas instâncias mongod? para obter informações mais detalhadas e específicas da versão. Lembre-se de verificar se a versão do MongoDB que você está usando corresponde à parte superior esquerda da página (clique no número da versão para alterar a versão da documentação que você está vendo).

    
por 07.07.2015 / 04:03

Tags