Mémoire et caches dans MongoDB
Architecture de la mémoire MongoDB
- Cache de requêtes
- Stocke les plans d'exécution des requêtes récentes
- Améliore les performances des requêtes répétées
- Exemple : Utiliser db.collection.find(query).explain("executionStats") pour voir le plan d'exécution
- Journal
- Stocke les opérations de lecture et d'écriture
- Assure la durabilité des données
- Exemple : Configurer la fréquence de journalisation avec
--journalCommitInterval
- Cache des données
- Stocke les données fréquemment utilisées en mémoire
- Permet un accès rapide aux données
- Exemple : Utiliser
db.serverStatus().wiredTiger.cache
pour vérifier les statistiques du cache
Importance de la gestion de la mémoire
- Amélioration des performances
- Les données en cache réduisent les accès disque
- Diminution des temps de réponse
- Exemple : Configurer la taille du cache avec
storage.wiredTiger.engineConfig.cacheSizeGB
- Éviter les problèmes de contention
- Contention de la mémoire : concurrence pour l'accès à la mémoire
- Peut causer des problèmes de performance
- Exemple : Surveiller la contention avec
db.serverStatus().globalLock
Gestion de la mémoire virtuelle
Mémoire virtuelle : définition
- Espace disque pour les données en mémoire
- Extension de la mémoire physique
- Comprend la mémoire RAM et l'espace disque
Rôle de la mémoire virtuelle dans MongoDB
- Stockage des données
- Utilisation de la mémoire RAM pour accélérer l'accès aux données
- Gestion du cache
- Conserver les données fréquemment utilisées en mémoire pour optimiser les performances
Suivi de la mémoire virtuelle
- Commande
db.serverStatus()
- Exemple de commande shell : mongo --eval "db.serverStatus()"
- Champ
mem.virtual
- Indique la quantité de mémoire virtuelle utilisée
{
"mem": {
"virtual": 2048
}
}
Optimisation de la mémoire virtuelle
- Réglage du système d'exploitation
- Ajuster les paramètres de mémoire virtuelle du système d'exploitation (ex. Linux sysctl)
- Exemple de configuration Linux :
# /etc/sysctl.conf
vm.swappiness = 1
- Limitation de la mémoire allouée
- Restreindre la quantité de mémoire virtuelle utilisée par MongoDB
- Exemple de configuration MongoDB :
# /etc/mongod.conf
processManagement:
fork: true
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
storage:
dbPath: "/var/lib/mongo"
net:
bindIp: "127.0.0.1"
port: 27017
setParameter:
wiredTigerCacheSizeGB: 4
- Lecture/écriture des données
- Crucial pour les opérations courantes
- Impact direct sur l'expérience utilisateur
- Impacts sur la vitesse et la stabilité
- Temps de réponse réduit
- Moins de risques de blocage ou de crash
- Commandes MongoDB :
db.stats()
: statistiques globales de la base de données
db.<collection>.stats()
: statistiques d'une collection spécifique
- Outils système :
iostat
, vmstat
iostat
: statistiques d'utilisation des disques
Exemple : iostat -x 1
vmstat
: statistiques de la mémoire virtuelle
Exemple : vmstat 1
- Taux d'E/S
- Nombre d'opérations d'entrée/sortie par seconde
- Indicateur clé pour évaluer les performances
- Latence
- Temps écoulé entre l'émission d'une requête et la réception de la réponse
- Plus la latence est faible, meilleures sont les performances
- Taux d'erreurs
- Proportion d'opérations d'E/S ayant échoué
- Un taux d'erreurs élevé peut indiquer des problèmes matériels ou de configuration
Techniques d'optimisation
- Répartition des données (sharding)
- Distribue les données sur plusieurs serveurs
- Équilibre la charge et réduit la contention
- Indexation appropriée
- Crée des index pour accélérer les requêtes fréquentes
- Évite les scans de collection complets
- Compression des données
- Réduit l'espace disque et améliore les performances d'E/S
- Configurable avec WiredTiger
Configuration du matériel
- Disques SSD
- Performances d'E/S supérieures aux disques durs traditionnels
- Faible latence et temps d'accès rapides
- RAID
- Combine plusieurs disques pour améliorer les performances et la tolérance aux pannes
- RAID 10 recommandé pour MongoDB
- Mémoire suffisante
- Permet de stocker davantage de données en cache
- Réduit les accès disque
Réglages MongoDB
- Moteur de stockage WiredTiger
- Utilisé par défaut depuis la version 3.2
- Performances supérieures à MMAPv1
- Gère la compression des données et l'isolation des transactions
- Activer WiredTiger :
--storageEngine wiredTiger
storage.wiredTiger.engineConfig.cacheSizeGB
- Configure la taille du cache WiredTiger
- Ajuster en fonction de la taille de la mémoire
- Exemple de configuration :
--wiredTigerCacheSizeGB 8
Percona Blog: MMAPv1 VS WiredTiger