A compactação do MongoDB 3.2 WiredTiger inclui material armazenado na RAM

3

Pelo que entendi, o WiredTiger comprime o diário, coleções e índices. Ele também os compacta enquanto são armazenados na RAM?

Por exemplo, se meu índice de compressões usar 10 MiB em disco, posso assumir que eles também usam 10 MiB de RAM? Ou devo esperar um índice descompactado maior na RAM?

    
por Antonius Bloch 13.01.2017 / 19:22

1 resposta

3

O WiredTiger tem diferentes representações de dados no disco versus na memória e usa diferentes abordagens de compactação para índices versus dados de coleta.

A resposta sobre o que é compactado na memória é um pouco diferente, mas o resumo de alto nível é:

  • os dados da coleta são compactados no cache do sistema de arquivos
  • os dados da coleta são descompactados no cache interno do WiredTiger
  • os índices são compactados no disco e na memória

Abordagens de compactação

Por padrão, o WiredTiger usa a compactação de blocos do Snappy para dados de coleta, mas há outras opções disponíveis, incluindo a compactação zlib ou nenhuma compactação. A compactação de bloco pode fornecer economias significativas de armazenamento, mas os dados devem ser descompactados para serem manipulados pelo servidor. Independentemente das opções de compressão, os dados ainda são gravados no disco em um formato de bloco que difere da representação na memória no cache do WiredTiger.

Índices são compactados usando compactação de prefixo de índice, o que efetivamente desduplica prefixos comuns de campos indexados. Isso pode ser especialmente efetivo para índices compostos, já que os valores dos campos principais serão repetidos com valores exclusivos para campos adicionais no índice. A compactação de prefixo também permite que as consultas operem diretamente em índices compactados.

O que é compactado na RAM?

Como no MongoDB 3.4 (e incluindo versões anteriores do MongoDB com o WiredTiger), há dois caches significativos para dados na RAM:

  • O cache interno do WiredTiger, que é controlado pela configuração cacheSizeGB configuração .

    O tamanho do cache padrão no MongoDB 3.4 é o maior de 50% da RAM, menos 1 GB ou 256 MB. Os dados de coleta no cache interno são descompactados, no entanto, os dados de índice ainda usam compactação de prefixo. Os dados no cache interno do WiredTiger são efetivamente o conjunto de trabalho atual .

  • O cache do sistema de arquivos O / S, que geralmente é o restante da RAM livre que não é usada pelo cache do WiredTiger ou por outros processos.

    O cache do sistema de arquivos é idêntico à representação em disco.

Ajuste de cache

Observe que o cache WiredTiger não representa o uso total de memória do MongoDB: mongod ainda precisará alocar memória fora do cache para outros usos, como conexões e processamento de dados (por exemplo, agregação, mapeamento / redução, memória tipo).

O cache interno do WiredTiger geralmente deve ser deixado no tamanho padrão ou potencialmente reduzido. Se seus dados compactarem bem e os dados descompactados forem muito maiores do que a RAM, você poderá ajustar mais dados na memória RAM, reduzindo o tamanho do cache do WiredTiger para liberar memória para o cache do sistema de arquivos. O manual do MongoDB tem um FAQ com mais informações: Para qual tamanho devo configurar o cache interno do WiredTiger? .

Para mais informações, recomendo rever as Novas opções de compactação no MongoDB 3.0 post de blog e Apresentação de uma introdução técnica ao WiredTiger .

    
por 14.01.2017 / 00:15

Tags