sagen, dass ich ein Mongo DB-Server zu starten:MongoDB - Verschiedene Abfrageausführungszeiten nach der Server-Neustart
mongo --dbpath=/some/path --port=12345 --storageEngine wiredTiger
ich dann eine die gleiche Abfrage 10 mal laufen (die erste abgesehen, so dass sie alle sind an warmer Cache) wie folgt:
mongo query1.js
die Zeiten, die wir bekommen sind (wie über time
und auch die mongodb Logger) verifiziert:
8137ms 8145ms 8193ms 8091ms 8152ms 8110ms 8182ms 8142ms 8133ms 8098ms
Großartig - ziemlich konsistent. Alle sind innerhalb ~ 100ms voneinander, was sinnvoll ist.
ich dann den Server herunterfahren, in jede der folgenden Moden:
pkill mongod mongod --dbpath=/some/path --shutdown mongo shutdown.js
Wo shutdown.js
enthält:
db.getSiblingDB('admin').shutdownServer();
ich es dann neu zu starten, genau das gleiche mit Befehl, und ich bekomme folgende Zeiten:
8531ms 8492ms 8613ms 8555ms 8538ms 8512ms 8551ms 8511ms 8608ms 8522ms
Auch sie sind durchweg innerhalb von ~ 100 ms, aber sie sind alle auf einer anderen Baseline.
Wenn ich das wieder mache, könnte es um 8.3
, 8.6
, 8.9
, oder irgendwo dazwischen wirklich sein. Es sind keine anderen Benutzerprozesse geöffnet (mit Ausnahme derjenigen, die für den Zugriff auf den Computer benötigt werden).
lief ich ein Experiment wie folgt:
while True: run the query 25 times and record the minimum such runtime shutdown the server and restart it, wait for it to listen
Dies lief für zwei Tage über das Wochenende, während ich nicht mit der Maschine interagieren hat, 223 Datenpunkte zu sammeln, und die Mindestlaufzeiten reichten von 7.9s
zu 8.9s
. Wenn ich den Server nicht zwischendurch heruntergefahren habe, passiert das nicht, aber wieder könnte ich eine Basislinie von 7.9s
bekommen oder ich könnte eine von 8.9s
bekommen.
Die Standardabweichung von einem Datenpunkt (die Laufzeiten der 25 Abfragen) war immer sehr niedrig (etwa 0,06), aber zwischen allen Abfragen war wirklich hoch.
Hat jemand Intuition darüber, warum das passiert und wie ich es verhindern kann? Ich versuche herauszufinden, ob eine Abfrage schneller ist als eine andere, aber ich kann keine gute Basislinie zum Testen bekommen. Das Neustarten des Servers ist nicht unbedingt notwendig, aber es würde mein Leben einfacher machen, da ich den Server nicht immer laufen lasse.
Diese Abfragen sollten alle als Teil der langsamen Abfrageprotokollierung in der Mongod-Protokolldatei protokolliert werden. Können Sie bestätigen, ob für jeden Stapel derselbe Index verwendet wird? –
Diese bestimmte Abfrage ist ein Aggregat, das nur eine $ -Gruppe erstellt und sie dann sortiert, so dass ein Index überhaupt nicht verwendet wird (er muss einen COLLSCAN ausführen). Ich bin mir nicht sicher, ob das irgendwas bewirkt. Ich habe übrigens die Anzahl der Instruktionen und Cache-Misses über Valgrind verifiziert. Ich erhalte eine Varianz von etwa 0,005% bei Instruktionszählungen (ein halbes Prozent) und vernachlässigbare Cache-Änderungen, wobei die Abfragezeiten um bis zu 6% variieren können, obwohl sie innerhalb eines Starts des Servers nur um etwa ein Prozent variieren. Es ist sehr seltsam. – user1661781
Beginnen Sie Mongod, Numactl zu deaktivieren? Was ist die genaue Version von Mongod, von OS, Dateisystem, etc? –