Ich versuche, einige Mongo-Protokolle zu durchsuchen, um langsame Vorgänge zu finden, die ich optimieren muss. Die langsame Abfrageprotokollierung ist standardmäßig eingestellt und protokolliert Vorgänge über 100 ms.
Ich denke, man kann mit Sicherheit sagen, dass eine Suche nach COLLSCANS im Allgemeinen Abfragen anzeigt, die Aufmerksamkeit erfordern. Weniger klar ist, ob IXSCANS ein Detail ist, nach dem ich suchen sollte.
Unter Berücksichtigung der MongoDB-Dokumentation hier:
https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use
Nach meinem Verständnis handelt es sich hierbei um eine binäre Situation, eine Abfrage ist entweder ein COLLSCAN oder ein IXSCAN. Wenn ich also nach IXSCAN greppe, schaue ich mir ALLE langsamen Abfragen an, die keine COLLSCANS sind. Stimmt das?
Antwort1
Ich versuche, einige Mongo-Protokolle zu durchsuchen, um langsame Vorgänge zu finden, die ich optimieren muss. Die langsame Abfrageprotokollierung ist standardmäßig eingestellt und protokolliert Vorgänge über 100 ms.
Anstatt MongoDB-Protokolle zu durchsuchen, empfehle ich dringend die Verwendung der Skripte aus der Open Sourcemtools
Projekt. HINWEIS: Ich bin nicht der ursprüngliche mtools
Autor, aber ich bin ein Mitwirkender.
mtools
ist eine Sammlung von Python-Skripten, die durch die Mühe inspiriert wurde, GBs von Protokollen zu durchsuchen, um interessante Informationen für Produktionsbereitstellungen von MongoDB zu finden. Schlüsselskripte sollen in den typischen Befehlszeilen-Workflow passen, bei dem die Ausgabe durch aufeinanderfolgende Filter geleitet wird (z. B. mlogfilter --scan | mplotqueries
).
Zum Beispiel:
mloginfo --queries
ist ein guter Ausgangspunkt: Es fasst Abfragemuster zusammen, sodass Sie sich auf Abfragen konzentrieren können, die häufig ausgeführt werden und insgesamt einen größeren Einfluss auf Ihre Bereitstellung haben.mlogfilter
ist im Wesentlichen ein grep für MongoDB-Protokolle: Sie können Protokollzeilen nach Namespace, Dauer, Verbindung, Muster und anderen Kriterien filtern. Die--scan
Die Option ist hilfreich, um ineffiziente Abfragen zu identifizieren, bei denen es sich nicht unbedingt um einen Sammlungsscan handelt.mplotqueries
ist ein Tool zur Visualisierung von Protokollen, das sehr hilfreich sein kann, um Muster und Ausreißer zu identifizieren.
Ich denke, man kann mit Sicherheit sagen, dass eine Suche nach COLLSCANS im Allgemeinen Abfragen anzeigt, die Aufmerksamkeit erfordern. Weniger klar ist, ob IXSCANS ein Detail ist, nach dem ich suchen sollte.
Sammlungsscans sind im Allgemeinen von Interesse, können aber auch das Ergebnis einmaliger Abfragen oder erwarteter Nutzung einer kleinen Sammlung sein. Anstatt mich auf den Abfragetyp zu konzentrieren, würde ich langsame Abfragen (oder langsame Vorgänge im Allgemeinen) für Ihre Bereitstellung überprüfen, um ein besseres Verständnis dafür zu bekommen, was Sie möglicherweise verbessern können. Die Verwendung eines Index ist normalerweise gut, aber es gibt ineffiziente Indexverwendungen (z. B. In-Memory-Sortierung oderReguläre Ausdrücke ohne Berücksichtigung der Groß-/Kleinschreibung), die eine Auseinandersetzung wert sein können.
Nach meinem Verständnis handelt es sich hierbei um eine binäre Situation, eine Abfrage ist entweder ein COLLSCAN oder ein IXSCAN. Wenn ich also nach IXSCAN greppe, schaue ich mir ALLE langsamen Abfragen an, die keine COLLSCANS sind. Stimmt das?
Wenn Sie nach greppen, IXSCAN
finden Sie alle Protokollzeilen, die erwähnen IXSCAN
, aber das Ergebnis der langsamen Abfrageprotokollierung ist definitiv nicht binär und wird auch je nach MongoDB-Serverversion variieren. Während eine effiziente Indexnutzung eine offensichtliche Optimierung ist, gibt es eine Reihe internerPhasen des AbfrageplanersDies kann für das Verständnis der Abfrageleistung relevant sein.
Wenn Sie eine interessante langsame Abfrage in den Protokollen finden, ist der nächste Schritt normalerweise die Überprüfung detaillierterexplain output
. Ich benutze explain(true)
(auch bekannt alsallPlansExecution
Modus), da hier Details zu den berücksichtigten Abfrageplänen sowie zum Gewinnerplan angezeigt werden. Wenn Sie nicht sicher sind, wie Sie die Erläuterungsausgabe für eine langsame Abfrage interpretieren sollen, empfehle ich Ihnen, aufDBA StackExchange.
Es ist zu beachten, dass die Erläuterung einer Abfrage kein Maß für die tatsächliche Leistung bei einer Arbeitslast ist. Im Normalbetrieb werden Abfragepläne zwischengespeichert, während bei der detaillierten explain
Ausgabe die Kandidatenindizes und der Abfrageplan speziell neu ausgewertet werden. SieheAbfragepläneWeitere Informationen finden Sie im MongoDB-Handbuch.