Große Tabellen zusammenfügen

Ich habe mir eine Tabelle von Messdaten aus mehreren anderen tabellen zusammenstellen wollen. Da ich aber gemerkt habe, dass dies mit zunehmender Tabellengröße immer langsamer wird, habe ich nun erstmal 10 unterschiedliche Tabellen erstellt und ich dachte mir die könnte man sicher anschließend einfach aneinander hängen.

Anschließend habe ich alle Tabellen exportiert (was sehr schnell geht) und wollte sie nun aus den Dateien in eine Tabelle importieren (mit Copybefehl), allerdings scheint das auch sehr lange zu brauchen, da nach einigen Stunden immer noch kein Import vollständig ist.

Ist es normal, dass ein importieren einer 5 gbyte datei so lange dauert? (Ich versuche es mit PGAdmin, was stundenlang den ganzen Rechner lahmlegt)

Kennt jemand irgend eine schnellere Methode? die Tabelle hat im Endeffekt mehrere 100 Millionen Zeilen, aber dafür muss es doch einfache Möglichkeiten geben diese Daten zu importieren ohne wochenlang zu warten.

Vielen Dank

was wird langsammer, was sagt EXPLAIN dazu?

habe ich nun erstmal 10 unterschiedliche Tabellen erstellt und ich dachte mir die könnte man sicher anschließend einfach aneinander hängen.

Anschließend habe ich alle Tabellen exportiert (was sehr schnell geht) und wollte sie nun aus den Dateien in eine Tabelle importieren (mit Copybefehl), allerdings scheint das auch sehr lange zu brauchen, da nach einigen Stunden immer noch kein Import vollständig ist.

Ist es normal, dass ein importieren einer 5 gbyte datei so lange dauert? (Ich versuche es mit PGAdmin, was stundenlang den ganzen Rechner lahmlegt)

Keine Ahnung, was PGAdmin da vielleicht mit macht - vielleicht arbeitet es als ‘Man in the middle’. Zumindest für komplexere Aktionen ist das CLI zu empfehlen.
Hast Du Indexe und TRIGGER aktiv?

Kennt jemand irgend eine schnellere Methode? die Tabelle hat im Endeffekt mehrere 100 Millionen Zeilen, aber dafür muss es doch einfache Möglichkeiten geben diese Daten zu importieren ohne wochenlang zu warten.

Vielen Dank

Tabellen partitionieren.

Ich habe leider bisher nur mit PGADMIN gearbeitet. In PGadmin werden mir keine Indizes oder Trigger angezeigt. wie man sie allgemein aktiv oder inaktiv setzt weiß ich nciht.

Wollte jetzt gerade den copy befehl in der psql console ausführen, aber meine Relation “measurement” wird nicht gefunden. Muss man dort noch irgendeinen Pfad für die Tabelle angeben ?
In PGAdmin ist sie unter myDB/Schemata/public/ zu finden.

Sry, dass ich so Anfängerfragen stellen muss.

Ähm, ja. Du hast eine Tabelle mit wohl einigen Millionen Datensätzen, laut PGAdmin ohne Indexe und wunderst Dich, daß Abfragen mit der Zeit langsam werden. Oder versteh ich grad was falsch?
Gut, wenn keine Indexe und Trigger da sind, brauchst die auch nicht auszuschalten. Was Du auch nicht brauchst: Dich über schlechte Performance wundern …

Wollte jetzt gerade den copy befehl in der psql console ausführen, aber meine Relation “measurement” wird nicht gefunden. Muss man dort noch irgendeinen Pfad für die Tabelle angeben ?
In PGAdmin ist sie unter myDB/Schemata/public/ zu finden.

Sry, dass ich so Anfängerfragen stellen muss.

PGAdmin verwendet gern mal Großbuchstaben bei der Anlage von Tabellen. Wenn Du dann in psql measurement oder “measurement” verwendest, wird die Tabelle aber mit Kleinbuchstaben gesucht.
Wie heißt denn die Tabelle nun genau?


Andreas

Nein, bei Abfragen war ich noch nicht. Ich wollte mir die Tabelle über INSERT Befehle zunächst zusammenbauen, das ist immer langsamer geworden. Tritt dieses Problem auch beim insert auf?

Mittlerweile konnte ich den copy befehl in der psql console ausführen. Aber eine etwa 1 GB große Datei läuft gerade schon 30 Minuten und ich weiß noch nicht wann sie ganz eingelesen ist, kann evtl. noch sehr lange dauern.
Sehe da noch keine Verbesserung :frowning:

Nein. Sind das sehr viele Einzel-Inserts? Dann fasse diese in einer Transaktion zusammen. Hast Du die Config von PG an die Hardware angepaßt?

Mittlerweile konnte ich den copy befehl in der psql console ausführen. Aber eine etwa 1 GB große Datei läuft gerade schon 30 Minuten und ich weiß noch nicht wann sie ganz eingelesen ist, kann evtl. noch sehr lange dauern.
Sehe da noch keine Verbesserung > :frowning: >

Nun ja, je nach Hardware, Optimierung, Tabellendesign etc. kann das halt dauern…


Andreas

Ich lese mir jetzt grad schon die Performancetipps in der Doku durch, danke für den Hinweis mit der Config.

Im Moment lade ich CSV Dateien ( Die 1 GB Datei braucht jetzt schon 2 Std. ), könnten pg_dumps eventuell schnelller sein?

Depends. Da sind die Daten faktisch auch nur als CSV. Aber wenn es mehrere Tabellen sind, und die Dumps im Custom-Format vorliegen, kannst Du mehrere parallele Jobs starten.

Andreas