Tuning de MongoDB en entornos Linux: Guía para mejorar el rendimiento

mongodb

MongoDB es una base de datos NoSQL ampliamente utilizada por su escalabilidad y flexibilidad. Sin embargo, si no se ajusta correctamente, puede convertirse en un cuello de botella para tus aplicaciones. En esta guía te explico cómo hacer tuning de MongoDB en servidores Linux para maximizar su rendimiento, con ejemplos prácticos y recomendaciones reales.

¿Por qué hacer tuning de MongoDB?

Por defecto, MongoDB está configurado para funcionar “de forma general”, pero cada entorno tiene requisitos distintos. Aplicar técnicas de tuning en MongoDB puede ayudarte a:

  • Reducir latencias de escritura y lectura.
  • Mejorar la respuesta bajo cargas altas.
  • Aumentar la eficiencia del uso de memoria y CPU.
  • Detectar cuellos de botella antes de que afecten al sistema.

Recomendaciones generales de tuning para MongoDB

1. Usa WiredTiger correctamente

WiredTiger es el motor de almacenamiento por defecto desde MongoDB 3.2. Asegúrate de que el parámetro cacheSizeGB esté bien dimensionado. Como regla general:

cacheSizeGB ≈ (RAM Total del sistema * 0.5) - RAM reservada para el sistema operativo y otros procesos

Ejemplo de ajuste:

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 16

2. Ajusta los límites del sistema (ulimits)

Por defecto, muchos sistemas Linux imponen límites demasiado bajos para procesos como mongod.

Ajustes recomendados en /etc/security/limits.conf:

mongodb soft nofile 64000
mongodb hard nofile 64000
mongodb soft nproc 64000
mongodb hard nproc 64000

Y en /etc/systemd/system/mongod.service.d/override.conf:

[Service]
LimitNOFILE=64000

3. Desactiva Transparent Huge Pages (THP)

THP puede perjudicar gravemente el rendimiento de MongoDB.

Verifica si está activado:

cat /sys/kernel/mm/transparent_hugepage/enabled

Desactiva temporalmente:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Desactiva permanentemente: agrega al GRUB transparent_hugepage=never

4. Configura el commitIntervalMs en entornos con mucha escritura

Si tu sistema tiene mucha escritura continua, puedes ajustar commitIntervalMs para balancear durabilidad y rendimiento.

storage:
  journal:
    commitIntervalMs: 100

Métricas clave que debes monitorizar

  • opcounters.insert, opcounters.query: tasa de operaciones
  • mem.resident: uso de RAM por MongoDB
  • connections.current: conexiones activas
  • locks.*: bloqueos en colecciones o base de datos
  • wiredTiger.cache.*: uso del cache interno

¿Tienes dudas sobre tu caso específico? ¡Déjalas en los comentarios y te ayudamos!

Puntúa este artículo

Deja una respuesta