Performances

Explain

La commande explain est utilisée pour savoir ce que fati la base de données d’une requête donnée: comment elle l’exécute, quels index sont utilisées, combien de documents sont inspectés, etc.

On ne peut pas l’utiliser sur l’instruction insert.
Pour lister les méthodes qu’explain prend en charge, utiliser la commande help:

db.students.explain().help()

La commande explain a différents modes, permettant d’afficher différentes statistiques:


Moteur de stockage

Le moteur de stockage est l’interface entre le stockage (disque) et la base de données (MongoDB): le driver requête le serveur MongoDB, qui le relaie ensuite sur le disque via un moteur de stockage pour créer, lire, mettre à jour et supprimer des données.

Le moteur de stockage peut être modifié et selon celui qu’on utilise, les performances ne sont pas les mêmes pour différentes opérations. Les deux principaux moteurs de stockage sont MMAP (par défaut) et WiredTiger. Le moteur de stockage n’affecte pas la communication entre les différents serveurs MongoDB ni l’API de la base de données.

MMAP

MongoDB MMAP permet

WiredTiger

WiredTiger

Les fichiers MMAP et WiredTiger sont incompatibles.

Pour démarrer MongoDB avec WiredTiger:

killall mongodb
mongod -dbpath data -storageEngine wiredTiger

Slow queries

Par défaut, MongoDB logge les requêtes lentes de plus de 100ms dans la sortie console.

Pour démarrer MongoDB avec une durée autre, passer le paramètre --slowms <integer>

mongod --slowms 2

Profiler

Il est possible d’écrire les requêtes effectuées vers system.profile. Il s’agit d’une cap collection, ce qui signifie qu’elle a une taille fixe et que l’espace est recyclé une fois remplit (les anciennes logs sont effacées).

Pour logger les requêtes, il faut activer le profiler. Trois modes sont possibles:


Mongotop

mongotop est nommée d’après la commande Unix top. Elle affiche où MongoDB passe son temps.

mongotop 3 # rafraîchir toutes les 3 secondes
                     ns    total    read    write          2014-12-19T15:32:01-05:00
     admin.system.roles      0ms     0ms      0ms
   admin.system.version      0ms     0ms      0ms
               local.me      0ms     0ms      0ms
         local.oplog.rs      0ms     0ms      0ms
 local.replset.minvalid      0ms     0ms      0ms
      local.startup_log      0ms     0ms      0ms
   local.system.indexes      0ms     0ms      0ms
local.system.namespaces      0ms     0ms      0ms
   local.system.replset      0ms     0ms      0ms

Mongostat

mongostat est nommée d’après la commande iostat. Elle échantillonne la base de données seconde par seconde et donne des informations sur qu’elle fait: nombre d’insertions, de requêtes, mise à jour et suppressions.

mongostat
insert query update delete getmore command dirty used flushes vsize  res qrw arw net_in net_out conn                time
   991    *0     *0     *0       0     2|0  3.4% 4.5%       0 2.90G 297M 0|0 0|0  12.9m   84.2k    2 Oct  6 09:45:37.478
   989    *0     *0     *0       0     2|0  3.6% 4.7%       0 2.91G 310M 0|0 0|0  12.9m   84.1k    2 Oct  6 09:45:38.476
   988    *0     *0     *0       0     1|0  3.7% 4.8%       0 2.92G 323M 0|0 0|0  12.8m   83.8k    2 Oct  6 09:45:39.481
   976    *0     *0     *0       0     2|0  3.9% 5.0%       0 2.94G 335M 0|0 0|0  12.7m   83.7k    2 Oct  6 09:45:40.476