を再起動した後に別のクエリの実行時間が、私はモンゴDBサーバを起動すると言う:のMongoDB - サーバー
mongo --dbpath=/some/path --port=12345 --storageEngine wiredTiger
彼らはすべてしているように、私は、その後、最初のものを無視して(10回同じクエリを実行します次のように)暖かいキャッシュ上:
mongo query1.js
私もMongoDBのロガー)time
を通じて検証として(あり得る回:
8137ms 8145ms 8193ms 8091ms 8152ms 8110ms 8182ms 8142ms 8133ms 8098ms
グレート - かなり一貫しています。すべてがお互いに〜100ミリ秒以内にありますが、それは理にかなっています。
Iその後、サーバをシャットダウン、 次のファッションのいずれかので:db.getSiblingDB('admin').shutdownServer();
は、私は、まったく同じを使用して、それを再起動します。shutdown.js
が含まれてい
pkill mongod mongod --dbpath=/some/path --shutdown mongo shutdown.js
コマンドを実行して、次の時刻を取得します。
8531ms 8492ms 8613ms 8555ms 8538ms 8512ms 8551ms 8511ms 8608ms 8522ms
は再び、彼らは〜100ミリ秒以内に一貫しているが、それらは異なるベースラインですべてです。
これをもう一度行うと、実際には8.3
、8.6
、8.9
、またはその間にある可能性があります。他のユーザープロセスは開かれていません(マシンにsshを実行するために必要なプロセスを除く)。
次のように私は実験を走った:私は223のデータ点を収集し、機械と相互作用しなかった一方で
while True: run the query 25 times and record the minimum such runtime shutdown the server and restart it, wait for it to listen
これは、週末2日間走り、最小ランタイムは7.9s
からの範囲でした8.9s
。その間にサーバーをシャットダウンしなかった場合、これは発生しません。でも、ベースラインが7.9s
になるか、8.9s
のいずれかが表示されることがあります。
1つのデータポイントの標準偏差(25クエリのランタイム)は常に低い値(約0.06)でしたが、すべてのクエリの間では非常に高かったです。
誰にもなぜこれが起こっているのか、どうやってそれを防ぐことができるのかについての直感はありますか? 1つのクエリが他のクエリより速いかどうかを判断しようとしていますが、テストするための適切なベースラインを得ることはできません。サーバーを再起動することは絶対に必要なわけではありませんが、サーバーが稼動しているとは限りませんので、私の人生は楽になります。
これらのクエリはすべて、mongodログファイルに低速クエリのログとして記録される必要があります。同じ索引が各バッチで使用されているかどうか確認できますか? –
この特定のクエリは、$グループのみを実行してソートする集約であるため、インデックスはまったく使用されません(COLLSCANを実行する必要があります)。これが何かに影響を与えるかどうかはわかりません。ちなみに、Valgrindを使って命令数とキャッシュミスを確認しました。命令の数(半分パーセント)で約0.005%のばらつきがあり、キャッシュの変更は無視されます。サーバーの1回の起動で約1%しか変化しないにもかかわらず、クエリ時間が6%も異なることがあります。それは非常に奇妙です。 – user1661781
mongodを起動してnumactlを無効にしていますか? mongod、OS、ファイルシステムなどの正確なバージョンは何ですか? –