Aller au contenu

Mémoire et performances des E/S#

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
      

Mesure des performances d'E/S#

Importance des performances d'E/S#

  • 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

Outils pour mesurer les performances d'E/S#

  • 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

Analyse des indicateurs de performance#

  • 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

Optimisation des performances d'E/S#

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