o que significa% em mongostat bloqueado?

6

Ao rodar o mongostat para ver nosso banco de dados mongo, eu frequentemente vejo o número% bloqueado aumentar, algumas vezes chegando a 80%. Veja algumas linhas de exemplo:

insert  query update delete getmore command flushes mapped  vsize    res faults locked % idx miss %     qr|qw   ar|aw  netIn netOut  conn       time 
 0     10      7      0       0      17       0  2.27g     5g  1.63g      0      0.1          0       0|0     0|0    22k     7k    83   15:46:10 
 0     21      7      1       0      23       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|1    11k   424k    83   15:46:11 
 0     28     10      3       0      28       0  2.27g     5g  1.73g      0     26.9          0       0|0     0|0    33k   196k    83   15:46:12 
 0     17      6      3       0      13       0  2.27g     5g  1.72g      0     18.2          0       0|0     0|0    11k    10k    83   15:46:13 
 0     18      5      1       0      11       0  2.27g     5g  1.73g      0      0.1          0       0|0     0|0    23k   362k    83   15:46:14 

A ajuda do mongostat diz que é

locked - percent of time in global write lock

Meu entendimento é que as gravações bloqueiam todo o banco de dados. Se eu tiver dois bancos de dados no mesmo servidor mongo (A e B), será gravado em um bloco escreve em B? Metade do tempo em um banco de dados significa que ele mostrará 25% (como usar metade de um núcleo em uma caixa dual-core) ou será exibido 50%?

    
por edebill 15.09.2011 / 18:00

2 respostas

5

Sim, o MongoDB utiliza um bloqueio de gravação global (em todo o servidor), portanto, "bloqueio%" conforme relatado por mongostat representa o tempo total que o servidor gastou em bloqueio global de gravação durante o último período de amostra (um segundo) para todos os ops em todos os dbs.

Conforme você faz mais operações de gravação, como atualizações, inserções, exclusões e avaliações, esse valor aumenta.

Os números da amostra acima não são alarmantes para um servidor autônomo.

Leituras regulares de 80%, no entanto, sugerem que você queira balancear suas leituras e gravações em mais servidores ou dividir sua (s) coleção (s), embora eu pareça estar fragmentando para aliviar problemas de armazenamento antes do desempenho.

Em geral, as chaves para otimização incluem indexação correta e abrangente, limitação de resultados, uso do profiler e explain () para descobrir afunilamentos e garantir que você esteja usando o driver adequadamente (a experiência com o tamanho do lote do cursor pode produzir melhorias significativas ).

    
por 16.09.2011 / 04:36
1

As porcentagens altas de bloqueio de gravação não são a única indicação de desempenho. Você deve combinar esse número com sua fila de gravação, que indica o número de inserções / atualizações / upserts e remover operações que estão na fila (no total) para adquirir um bloqueio. Se ambos os números permanecerem consistentemente altos, há um problema que deve ser resolvido imediatamente. Se for esse o caso, comece puxando as consultas mais lentas, analise e tente ajustá-las. Quando nenhum ajuste adicional for possível, ative os recursos alocados no servidor.

    
por 25.09.2013 / 23:34