MongoDB - nível de fragmentação da coleção / banco de dados

1

Recentemente, tive um problema de desempenho em uma das minhas coleções.
Por um capricho (e graças a este artigo ), eu decidi para tentar compactar (como está escrito na documentação oficial ).
Isso funcionou brilhantemente. No entanto, agora estou me perguntando com que frequência devo fazê-lo.
Como a compactação não é uma tarefa totalmente on-line (só posso fazê-lo em nós passivos), não posso decidir fazer isso todas as noites e esquecê-la.

Não consegui encontrar nenhuma documentação sobre como saber quando uma coleção / banco de dados tem uma alta taxa de fragmentação. Você tem alguma experiência com a determinação do nível de fragmentação de um banco de dados (além do benchmarking)?

Observação : estou falando de fragmentação "interna", como em espaços dentro do arquivo, e não de fragmentação "externa", como no arquivo espalhado pelo disco.

    
por Nitz 20.07.2014 / 15:02

1 resposta

1

O nível de compactação pode ser determinado comparando o tamanho de dados em uma coleção por meio de db.stats. dataSize fornece a quantidade de dados na coleção, em que storageSize informa o tamanho dos arquivos. dataSize < = storageSize, mas quão grande é a diferença deve dizer-lhe quanto ganho obterá através da compactação.

O Mongo não permite que os objetos não sejam totalmente co-localizados, portanto você não obterá casos em que um objeto esteja espalhado pelos arquivos de dados. Onde isto entra em jogo é se um objeto se expande além da alocação livre, todo o objeto tem que ser reescrito em algum lugar maior.

Quando eu estava jogando com bancos de dados do Mongo, uma compactação em uma janela de manutenção trimestral era tudo que precisávamos. Porém, nosso conjunto de dados não tinha muitas exclusões, por isso não criamos vazios com frequência. Para descobrir sua taxa, acompanhe esses dois valores de dbStats e veja como eles se movem com o tempo.

    
por 20.07.2014 / 15:13