2013-11-21 8 views
5

Ich habe festgestellt, dass das erste Mal, wenn ich eine Abfrage auf RedShift ausführen, dauert es 3-10 Sekunden. Wenn ich dieselbe Abfrage erneut ausführen, sogar mit unterschiedlichen Argumenten in der WHERE-Bedingung, läuft sie schnell (0,2 Sekunden). Abfrage, über die ich sprach, läuft auf einer Tabelle von ~ 1M Zeilen, auf 3 ganzzahligen Spalten.Lange Laufzeit, wenn Abfrage zum ersten Mal in RedShift

Wird dieser große Unterschied in den Ausführungszeiten dadurch verursacht, dass RedShift die Abfrage zum ersten Mal kompiliert und dann den kompilierten Code erneut verwendet?

Wenn ja - wie behalte ich diesen Cache kompilierter Abfragen immer warm?

Eine weitere Frage: Gegeben QueryA und QueryB. Nehmen wir an, dass queryA zuerst kompiliert und ausgeführt wurde. Wie ähnlich sollte queryB zu queryA sein, sodass die Ausführung von queryB den für queryA kompilierten Code verwendet?

Antwort

4

Die Antwort der ersten Frage ist ja. Amazon Redshift kompiliert Code für die Abfrage und speichert sie zwischen. Der kompilierte Code wird in Sitzungen in einem Cluster gemeinsam genutzt. Daher wird die gleiche Abfrage mit sogar unterschiedlichen Parametern in der anderen Sitzung schneller ausgeführt, da keine zusätzlichen Kosten anfallen.

Sie empfehlen auch, das Ergebnis der zweiten Ausführung der Abfrage für den Benchmark zu verwenden.

Es gibt die Antwort für diese Frage und Details in der folgenden Verbindung. http://docs.aws.amazon.com/redshift/latest/dg/c-compiled-code.html

+0

Dies ist absolut richtig. Ich vertiefte mich tiefer in herauszufinden, was genau verursacht eine Neukompilierung des Codes: https://medium.com/@pingram/redshift-code-compilation-977143576e89 – Phil

+0

Wie können Sie sagen, ob das zweite Mal, das Ergebnis nicht kommt aus einem zwischengespeicherten Ergebnis? Können Sie wirklich auf die Ausführungszeit für den zweiten Versuch derselben Abfrage für Leistungstests zählen? Ein weiterer Link http://docs.aws.amazon.com/redshift/latest/dg/c-query-performance.html – Faiz

+0

Sie können die Auswirkungen der Abfrage kompilieren isoliert testen, indem Sie verschiedene Abfragen auf eine leere Tabelle, um Daten zu beseitigen Caching als Variable. Ich fand, dass die Latenz der Abfragekompilierung mit der Komplexität der Abfrage skaliert: insbesondere die Anzahl der beteiligten Tabellen und Joins. Siehe: http://wrschneider.github.io/2017/06/02/redshift-compile-latency.html – wrschneider

Verwandte Themen