2016-11-13 1 views
0

Ich spiele mit MemSQL und es scheint sehr schnell zu sein. Aber wenn ich SELECT * FROM [some big table] ausführen dauert es normalerweise eine lange Zeit. Ich kann viel Verkehr in MemSQL Opt und fast keine CPU/Speicher-Nutzung sehen. Ich habe meinen SQL-Editor (DataGrip) gesetzt, um nur 500 Zeilen zu holen, aber es hilft nicht (ich weiß, dass ich limit-Befehl verwenden kann).SELECT * in MemSQL

Meine Frage ist was ist los? Werden alle Partitionen alle Ergebnisse an meinen Client senden, der danach nur 500 Zeilen abruft? Gibt es eine Möglichkeit, dies zu überwachen?

+0

Wie werden Ihre Daten gesendet? – eklhad

Antwort

0

Was passiert ist sehr situationsabhängig, aber Sie können EXPLAIN SELECT * FROM [some big table] verwenden, und das sollte Ihnen sagen, was die Abfrage in einem weiten Sinn tut, die Ihnen einen Hinweis geben kann, welcher Schritt in der Abfrage dauert eine lange Zeit

Wenn nicht alle Ergebnisse an den Client gesendet werden, fügt der Client ein Limit für Sie hinzu. Sie können show plancache verwenden und nach dem Vorhandensein von SELECT * FROM [some big table] LIMIT 500 suchen, um festzustellen, ob Ihr Client das automatisch hinzufügt. Wenn es die Abfrage mit einem Limit ausführt, sollte es viel schneller gehen, aber es würde mich nicht überraschen, wenn es nur die Ergebnisse an Ihrem Ende abschneidet - was die Geschwindigkeit überhaupt nicht verbessern wird.

Wenn Sie CPU, Speicher, Disk I/O und Netzwerk überwachen, dann haben Sie im Grunde alles abgedeckt. Wenn Sie keinen Spaltenspeicher verwenden, sollten Sie überhaupt keinen Datenträger verwenden, da es entweder einen Fehler oder einen Netzwerk-Engpass gibt. Der wahrscheinlichste Täter ist ein grober verteilter Join, diese können ziemlich langsam sein - besonders in älteren Versionen.

0

Wenn Sie eine Abfrage wie diese ausführen, muss der Agregator alle Zeilen aus den Blättern abrufen und sie an den Client senden. Der Aggregator ruft Zeilen vor dem Lesen des Clients ab, so dass mehr als 500 Zeilen über das Netzwerk übertragen werden, bis der Puffer gefüllt ist. Mit LIMIT können Sie eine begrenzte Anzahl von Zeilen lesen.