AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 19491
Accepted
ledy
ledy
Asked: 2012-06-20 03:53:20 +0800 CST2012-06-20 03:53:20 +0800 CST 2012-06-20 03:53:20 +0800 CST

MongoDB: requisitos de RAM

  • 772

É suficiente ter todo o índice na memória/ram ou o mongodb tenta alocar o máximo de RAM possível para armazenar até os dados para leituras rápidas?

Eu gostaria de executar o mongodb + outros aplicativos e parece que o mongodb é o único que não me permite definir um intervalo de RAM, digamos "max_memory_allocated_or_reserved=8GB".

Se não houver como fazer isso, devo explicar ao oom-killer que mongod é o processo "ruim" que não é a melhor prática na minha opinião ...

mongodb
  • 3 3 respostas
  • 45563 Views

3 respostas

  • Voted
  1. Best Answer
    Adam C
    2012-06-20T13:48:59+08:002012-06-20T13:48:59+08:00

    A verdadeira razão pela qual você não pode fazer o que pede (limitar a memória) é porque o MongoDB não gerencia a memória que usa diretamente - ele permite que o SO faça isso. O MongoDB apenas mapeia todos os seus dados de memória e, em seguida, faz com que a página do SO entre e saia da memória conforme necessário. Como resultado, não há gerenciamento direto da quantidade usada possível até que o MongoDB implemente isso de uma maneira completamente diferente, ou o sistema operacional permita (não é possível no Linux desde os 2,4 dias).

    A única maneira de realmente segregar recursos no momento é usar uma solução de virtualização e isolar o MongoDB em sua própria VM. Sim, há despesas gerais envolvidas (embora os hipervisores tenham melhorado muito), mas no momento esse é o preço a ser pago por esse nível de controle de recursos.

    Em termos do OOM Killer, mesmo sem outros processos no host, desde que seu conjunto de dados e índices excedam a memória disponível, o MongoDB pode atingir problemas do OOM Killer. Isso ocorre por causa de como os dados são paginados para fora da memória - se não houver pressão de memória (nada mais deseja memória residente) e você continuar adicionando/tocando novos dados e índices, eventualmente ele crescerá para consumir toda a RAM disponível. Daí a recomendação de sempre configurar algum swap ao executar o MongoDB:

    https://docs.mongodb.com/manual/administration/production-notes/#swap

    É claro que os dados LRU serão paginados primeiro, outros processos também podem ocupar o res mem, mas o conceito ainda se aplica, a menos que você carregue seu conjunto de dados na memória e ele permaneça estático. A melhor coisa a fazer se você estiver preocupado é colocá-lo no MMS e acompanhar o uso ao longo do tempo:

    http://mms.mongodb.com

    Atualização: agosto de 2015

    Desde que escrevi esta resposta, as coisas mudaram um pouco e as informações estão um pouco desatualizadas. Por exemplo, o Linux agora tem cgroups e tecnologias relacionadas ( contêineres Docker, por exemplo) que amadureceram a ponto de permitir que você isole e limite melhor os recursos ( incluindo memória ) consumidos por qualquer processo em um ambiente de produção, mesmo aquele que usa mapeamento de memória como MongoDB.

    Além disso, com o advento de novos mecanismos de armazenamento além do MMAP, como o WiredTiger no MongoDB 3.0+, você pode usar a funcionalidade integrada para limitar o tamanho do cache do MongoDB. Portanto, os requisitos de RAM agora realmente dependem de como você escolhe configurar o MongoDB, em qual ambiente você o executa e qual mecanismo de armazenamento você escolhe.

    • 19
  2. Stennie
    2012-06-20T05:40:48+08:002012-06-20T05:40:48+08:00

    O MongoDB usará a memória livre disponível para armazenamento em cache e fará a troca para o disco conforme necessário para fornecer memória para outros aplicativos no mesmo servidor. Para obter o melhor desempenho, você precisará de RAM suficiente para manter seus índices e dados usados ​​com frequência ("conjunto de trabalho") na memória.

    Leitura útil:

    • FAQ do MongoDB: O MongoDB requer muita RAM
    • Wiki do MongoDB: Verificando o uso da memória do servidor
    • 7
  3. efkan
    2016-10-06T00:39:04+08:002016-10-06T00:39:04+08:00

    Algumas coisas mudaram em anos sobre o MongoDB.

    TL;DR

    Se o mecanismo de armazenamento MMAPv1 for usado no MongoDB, o working settamanho deve caber na RAM . https://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

    Se o mecanismo de armazenamento WiredTiger for usado no MongoDB, não será necessário se preocupar com a RAM ser adequada working setou não . https://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

    Diagnóstico de memória para o mecanismo de armazenamento WiredTiger

    O tamanho do meu conjunto de trabalho deve caber na RAM?

    Não.

    Como calculo a quantidade de RAM necessária para o meu aplicativo?

    Com o WiredTiger, o MongoDB utiliza o cache interno do WiredTiger e o cache do sistema de arquivos.

    Alterado na versão 3.2: A partir do MongoDB 3.2, o cache interno do WiredTiger, por padrão, usará o maior de:

    60% de RAM menos 1 GB ou 1 GB.

    • 3

relate perguntas

  • Mongo Map-Reduce ou Sharding?

  • Configurando o Mongo com clustering

  • Diferença entre as chamadas find e findone do MongoDB

  • A fragmentação é eficaz para coleções pequenas?

  • Bons recursos para operar/administrar o MongoDB

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve