Frage

Ich habe ein Data Warehouse basierend auf PostgreSQL.

Bis jetzt habe ich versucht, Abfragen in einer Datenbank auszuführen, die nur einen Bruchteil meiner realen Datenbank enthält. Sobald ich die Abfragen so geschrieben habe, dass sie für diese kleine Testdatenbank effizient sind, führe ich die Abfragen auf dem realen aus.

Das Problem ist, dass die reale Datenbank, sobald ich die Abfragen in der realen Datenbank ausführte, aus dem Speicher ausgeht und Dinge wie Indizes und Temperaturtabellen auf die Festplatte schreibt. Dies bedeutet, dass es sein könnte, dass verschiedene Abfragen für die Testdatenbank und die reale Datenbank optimal sind. Bedeutet dies, dass ich wirklich Fragen ausführen muss, deren Abschluss einige Minuten dauern muss, um zu wissen, welche Frage die optimale ist.

War es hilfreich?

Lösung

Erfahren Sie, wie man das interpretiert EXPLAIN Ausgabe, dann überprüfen Sie das die EXPLAIN Die Ausgabe zeigt, dass der ausgewählte Abfrageplan in Ihrer großen Datenbank vor dem Ausführen der Abfrage ähnlich ist, was Sie erwarten würden.

Andere Tipps

Drei Fragen:

1) Wie komplex sind die Fragen? Die Erzeugung von Indizes und TEMP -Tabellen deutet darauf hin, dass der Server diese Dinge aufgrund komplexer Vorgänge in nicht indizierten Spalten generieren muss. Wie wahrscheinlich ist das? Nach allem, was Sie berichten, scheint die wahrscheinliche Antwort "komplex" zu sein, "komplex".

2) Wie groß sind die Rendite -Sets? Ist das Endergebnis 100 Zeilen oder 1 Million? Nach Ihrem Bericht könnte die Antwort alles sein. Ich vermute, dass diese Frage nicht so wichtig ist, aber zumindest wichtig ist.

3) Gibt es auf eine andere Art und Weise, auch wenn die zurückgegebenen Sätze klein sind, enorme Zwischenergebnisse, die auf dem Weg zum kleinen Ergebnis zusammengestellt werden müssen, auch wenn die zurückgegebenen Sätze klein sind? Auch hier vermute ich, dass die Antwort hier sind, dass große komplexe Zwischenergebnisse generiert werden.

Dies würde darauf hindeuten, dass zumindest einige Dinge indiziert werden müssen, und möglicherweise müssen die Daten auf dem Weg in den Weg strukturiert werden, um näher an dem zu sein, was Sie abfragen möchten.

Eine letzte Frage: Ist dies ein allgegenwärtiges Problem für die meisten Ihrer wichtigeren Fragen oder nur für ein oder zwei?

Bearbeiten Sie als Antwort auf einen Kommentar: Ich mache den ganzen Tag Data Warehouse -Abfragen, und einige dauern ungefähr 10 Minuten. Einige dauern Stunden, und ich schiebe sie in einen Hintergrundjob und zerlese sie in Phasen, um zu verhindern, dass alles drüben. Das ist die Natur des Umgangs mit sehr großen Datensätzen.

Meine Fragen in der ursprünglichen Antwort zielen darauf ab, herauszufinden, ob Ihre Problemfragen werden je Fertig. Es ist möglich, unabsichtlich eine Abfrage zu schreiben, die so viele Zwischendaten erzeugt, dass Sie weggehen, 2 Tage später zurückkommen und immer noch läuft. Ich würde also meine ursprünglichen drei Fragen wiederholen, sie sind in der Tat die einzige Möglichkeit, Ihre Frage vollständig zu beantworten.

Zusammenfassung: Ja, einige Fragen dauern viel länger, es ist die Natur des Tieres. Das Beste, auf das Sie hoffen können, ist linear für die Menge der gelesenen Daten. Aber noch wichtiger ist, wenn eine Abfrage in 4 Sekunden auf 1 Million Zeilen läuft, aber auf 100 Millionen Zeilen >> 400 Sekunden (wie eine Stunde) dauert, dann helfen Ihnen die ursprünglichen Fragen, die ich gestellt habe diese Fragen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top