Gostaria de saber se alguém pode ajudar com um problema de MongoDB/arquivo de página que parecemos ter à medida que nosso banco de dados aumenta de tamanho com o tempo. De vez em quando, o MongoDB falhará em um nó específico em nosso conjunto de réplicas e não será iniciado novamente até que aumentemos significativamente (o dobro é seguro) nosso tamanho de arquivo de página. Atualmente, o arquivo de paginação é de 42 GB. Estamos executando o MongoDB como um conjunto de réplicas de 3 nós e cada nó está sendo executado em uma máquina virtual do Windows Server 2012 R2 no Azure. Cada servidor tem 3,5 GB de memória. MongoDB é a versão 2.6.5.
Eu vi as postagens abaixo, que estão relacionadas, e entendo que o MongoDB usa arquivos mapeados pela memória e, presumivelmente, a memória virtual ajuda nisso quando não temos muita RAM. O que não entendo é:
Por que o MongoDB requer tanta memória na inicialização (arquivo de paginação > 32 GB para um banco de dados de 131 GB) e com um conjunto de trabalho relativamente pequeno (~ 100 MB)? Presumivelmente, ele pode trocar os arquivos conforme necessário, especialmente com um arquivo de página tão grande, então por que o MongoDB está travando?
Aqui estão os posts que encontrei até agora:
o uso de memória mongodb está alto, mesmo que apenas inserções sejam feitas
e este
SERVER-10044, que explica por que o Mongo trava e sugere que as VMs são piores
Agradecemos antecipadamente por qualquer ajuda.
Para fornecer mais contexto, estamos usando o MongoDB para registrar dados, portanto, a maioria das coleções é gravada, mas raramente lida, com exceção de algumas pequenas coleções (total de 100 MB) que estão sujeitas a leituras e gravações constantes. Os dados são armazenados em um único banco de dados Mongo DB, cujas estatísticas são mostradas abaixo (db e nomes de coleção modificados):
"db" : "MyDatabase",
"collections" : 854,
"objects" : 243025868,
"avgObjSize" : 541.2304596809423,
"dataSize" : 131533002252,
"storageSize" : 172592721920,
"numExtents" : 7268,
"indexes" : 1934,
"indexSize" : 27824138048,
"fileSize" : 210284576768,
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"extentFreeList" : {
"num" : 3,
"totalSize" : 110592
},
"ok" : 1
O conjunto de trabalho parece estar em torno da marca de 100 MB, conforme ilustrado abaixo:
"workingSet" : {
"note" : "thisIsAnEstimate",
"pagesInMemory" : 20874,
"computationTimeMicros" : 26236,
"overSeconds" : 876
},
A saída do arquivo de log no secundário que falhou mais recentemente é a seguinte (isso ocorreu durante a inicialização, embora a primeira vez que falhou tenha sido durante a operação normal):
2014-11-25T09:25:17.833+0000 [rsBackgroundSync] replSet syncing to: 10.1.6.71:27017 2014-11-25T09:25:17.833+0000 [rsBackgroundSync] replset setting syncSourceFeedback to 10.1.6.71:27017 1-2014 25T09:25:17.849+0000 [rsSync] replSet ainda sincronizando, ainda não para minValid optime 54744561:c 2014-11-25T09:25:18.286+0000 [rsSync] replSet SECONDARY 2014-11-25T09:26:01.590+0000 [ conn21] serverStatus estava muito lento: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters : 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 10451, após recordStats: 10451, após repl: 10451, no final: 10451 } 2014-11-25T09:26 :01.590+0000 [conn21] comando admin.$cmd comando:serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:65 reslen:4028 16764ms 2014-11-25T09:26:31.155+0000 [DataFileSync] liberando mmaps levou 15022ms para 115 arquivos 2014- 11-25T09:26:47.501+0000 [conn5] serverStatus estava muito lento: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info : 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 4791, após recordStats: 4791, após repl: 4791, no final : 4791 } 2014-11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:65 reslen:4028 16764ms 2014-11-25T09:26:31.155+0000 [DataFileSync] os mmaps de descarga levaram 15022ms para 115 arquivos 2014-11-25T09: 26:47.501+0000 [conn5] serverStatus estava muito lento: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014 -11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11 -25T09:27:06.350+0000 [repl escritor trabalhador 6]1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:65 reslen:4028 16764ms 2014-11-25T09:26:31.155+0000 [DataFileSync] os mmaps de descarga levaram 15022ms para 115 arquivos 2014-11-25T09: 26:47.501+0000 [conn5] serverStatus estava muito lento: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014 -11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11 -25T09:27:06.350+0000 [repl escritor trabalhador 6]0 locks(micros) r:65 reslen:4028 16764ms 2014-11-25T09:26:31.155+0000 [DataFileSync] a descarga de mmaps levou 15022ms para 115 arquivos 2014-11-25T09:26:47.501+0000 [conn5] serverStatus era muito slow: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios : 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [ conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer trabalhador 6]0 locks(micros) r:65 reslen:4028 16764ms 2014-11-25T09:26:31.155+0000 [DataFileSync] a descarga de mmaps levou 15022ms para 115 arquivos 2014-11-25T09:26:47.501+0000 [conn5] serverStatus era muito slow: { após basic: 0, após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios : 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog: 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [ conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer trabalhador 6]155+0000 [DataFileSync] limpeza de mmaps levou 15022ms para 115 arquivos 2014-11-25T09:26:47.501+0000 [conn5] serverStatus estava muito lento: { depois de básico: 0, depois de asserts: 0, depois de backgroundFlushing: 0, depois de conexões : 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog : 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates :0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]155+0000 [DataFileSync] limpeza de mmaps levou 15022ms para 115 arquivos 2014-11-25T09:26:47.501+0000 [conn5] serverStatus estava muito lento: { depois de básico: 0, depois de asserts: 0, depois de backgroundFlushing: 0, depois de conexões : 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, após opcounters: 0, após opcountersRepl: 0, após oplog : 4791, após recordStats: 4791, após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates :0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, after opcounters: 0, after opcountersRepl: 0, after oplog: 4791, after recordStats: 4791, after repl: 4791, at end: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] command admin.$cmd command : serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]após asserts: 0, após backgroundFlushing: 0, após conexões: 0, após cursores: 0, após dur: 0, após extra_info: 0, após globalLock: 0, após indexCounters: 0, após bloqueios: 0, após rede: 0, after opcounters: 0, after opcountersRepl: 0, after oplog: 4791, after recordStats: 4791, after repl: 4791, at end: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] command admin.$cmd command : serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros ) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]após repl: 4791, no final: 4791 } 2014-11-25T09:26:47.501+0000 [conn5] comando admin.$cmd comando: serverStatus { serverStatus: 1, oplog: 1 } keyUpdates:0 numYields:0 locks(micros ) r:88 reslen:4028 7674ms 2014-11-25T09:27:06.350+0000 [repl writer worker 6]VirtualProtect para m:/mongodb/data/MyDatabase.72 chunk 21220 falhou com errno:1455 O arquivo de paginação é muito pequeno para esta operação ser concluída. (tamanho do bloco é 67108864, endereço é 14b90000000) em mongo::makeChunkWritable, terminando 2014-11-25T09:27:06.350+0000 [repl writer worker 6] MyDatabase.RC_PUR_11_456754 Fatal Assertion 16362 2014-11-275:09. 0000 [repl writer worker 6] Falha no rastreamento de pilha, SymInitialize falhou com o erro 3765269347 2014-11-25T09:27:06.615+0000 [repl writer worker 6] MyDatabase.RC_PUR_11_456754 2014-11-25T09:27:06.615+0000 [repl writer trabalhador 6]
*** abortando após falha fassert ()