Erlang: Wie profile ich, ob qlc: q vollständige Tabellensuche, Schlüsselpräfix-Suche oder Schlüsselsuche durchführt?

9

Wie profiliere ich, ob qlc: q vollständige Tabellensuche, Schlüsselpräfixüberprüfung oder Schlüsselsuche durchführt?

Zum Beispiel werden ets vom Typ, die mit Einträgen wie {{KeyPrefix, KeySuffix}, Value} gesetzt sind,

%Vor%

Vollständige Tabellenüberprüfung oder Schlüsselpräfixüberprüfung durchführen?

    
trytrytry 12.04.2011, 13:51
quelle

3 Antworten

1

Sie können viele Informationen über Ihre QLC-Expression erhalten, indem Sie qlc: info / 1 . Das hilft Ihnen möglicherweise nicht zu bestimmen, ob eine gegebene Unterabfrage einen vollständigen Tabellenscan oder Ähnliches verwendet, aber das gibt Ihnen den Abfrageplan und die mit Ihrer Abfrage verbundenen Tabellen zurück, die Sie dann an ets: info / 1 , um ihren Typ und ihren Schlüssel abzurufen.

    
nox 10.05.2011 07:51
quelle
0

ETS ist in Erlang nicht implementiert, es ist im Laufzeitsystem implementiert (vermutlich in C?). Daher glaube ich nicht, dass dies heute möglich ist. Selbst wenn Sie einen Weg finden, dies zu tun, könnte Ihre Methode brechen, wenn Sie auf eine neue Version von Erlang aktualisieren. Eine zuverlässige Methode würde es erforderlich machen, dass das Laufzeitsystem eine Art Introspektions-API für die Innereien von ETS freigibt, und ich denke, dass dies unwahrscheinlich ist, solange es nicht in Erlang implementiert ist. Natürlich könntest du im Code nachsehen, um eine bessere Vorstellung davon zu bekommen, was in einem bestimmten Szenario passieren könnte, aber ich vermute, dass deine Zeit besser auf deinen Anwendungscode konzentriert ist.

    
Tim 09.05.2011 20:30
quelle
0

Nach unserer Erfahrung ist manchmal ein qlc eval (via Listenverständnis) sehr schlau, und manchmal ist es sehr dumm. Das heißt, ich denke deine Frage ist gültig.

Ich kenne keine Möglichkeit, genau das zu tun, was Sie wollen, aber Sie können diese Informationen möglicherweise mit anderen Mitteln erhalten. Sie können sicherlich den Quellcode des qlc -Moduls betrachten, um zu sehen, ob Sie daraus Erkenntnisse gewinnen können. Außerdem könnten Sie einige Debug-Anweisungen in die qlc -Funktionen einfügen und Ihre Erlang-Laufzeit neu kompilieren, um mehr Feedback zu erhalten.

Viel Glück
-tjw

    
Travis Webb 09.05.2011 20:36
quelle

Tags und Links