Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Bereiche im Bulk dump zu groß

  1. #1
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Böse Bereiche im Bulk dump zu groß

    Hi,

    ich erstelle mit dem SqlYog (alles unter Windows) einen Bulk-Dump (mit mysqldump hab ich das nicht hinbekommen). Das brauche ich auch so, damit das einlesen der einzelnen Tabellen im Block schnell geht. Dazu habe ich mit eine VB 6 Tool geschrieben, dass die Bereiche (ein Bereich = eine Tabelle = nur eine Insert Into) per 'Open Filename For Input As #F' und 'Line Input #F, varLine' einliest und dann direkt auf eine Postgre anwendet. Das klappt auch super sogar auf eine Tabelle mit 500.000 Datensätzen.

    Eine Tabelle hat aber über eine Millionen Datensätze. Die wird zu groß beim einlesen und scheitert nach 20 min Lesezeit mit 'Nicht genügend Zeichenfolgenspeicher'. Gibt es eine Möglichkteit die Anzahl oder Größe der 'Insert Into'-Blöcke im Dump zu beschränken? Es spricht doch nichts dagegen, dass es mehrere solcher Blöcke pro Tabelle geben könnte, oder?

    LG Sylvio

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von melodoi Beitrag anzeigen
    Hi,

    ich erstelle mit dem SqlYog (alles unter Windows) einen Bulk-Dump (mit mysqldump hab ich das nicht hinbekommen). Das brauche ich auch so, damit das einlesen der einzelnen Tabellen im Block schnell geht. Dazu habe ich mit eine VB 6 Tool geschrieben, dass die Bereiche (ein Bereich = eine Tabelle = nur eine Insert Into) per 'Open Filename For Input As #F' und 'Line Input #F, varLine' einliest und dann direkt auf eine Postgre anwendet. Das klappt auch super sogar auf eine Tabelle mit 500.000 Datensätzen.
    Wir halten fest: Du hast Dir mit VB was gefrickelt.

    Eine Tabelle hat aber über eine Millionen Datensätze. Die wird zu groß beim einlesen und scheitert nach 20 min Lesezeit mit 'Nicht genügend Zeichenfolgenspeicher'.
    Das ist mit Sicherheit keine Fehlermeldung von PG.

    Gibt es eine Möglichkteit die Anzahl oder Größe der 'Insert Into'-Blöcke im Dump zu beschränken? Es spricht doch nichts dagegen, dass es mehrere solcher Blöcke pro Tabelle geben könnte, oder?

    LG Sylvio
    Sicher. Nur hat PG damit kein Problem. Btw.: Warum nutzt Du nicht COPY?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Pfeil

    Also mir geht es darum ca. 150 MySQL-Datenbanken nach PostGre zu migrieren. Ja ich hab mir was mit VB gebastelt, weil der MySQL-Dump angepasst werden muss. Das Schema ist in PostGre schon fertig.

    Z.B. müssen in dem MySQL-Dump die einfachen Hochkommas raus. Beim Einlesen ignoriere ich alles außer was mit 'Insert Into' beginnt. Somit lese ich aus dem MySQL-Dump nur diese raus und führe sie dann direkt auf die PostGre aus. Das geht super schnell.

    Die Fehlermeldung kommt natürlich aus VB6.

    Was meist du mit copy?

    Wie geht das denn mit der Teilung der Tabellen im MySQL-Dump?

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Erst mal, die Datenbank heißt "PostgreSQL" oder "Postgres", bitte nicht "Postgre".

    Du hast also einen Dump einer MySQL Datenbank und willst den in PG einlesen, sehe ich das richtig? Es gibt fertige Tools, die so etwas umwandeln. Hast du die mal ausprobiert? Eines heißt "mysql2pg" oder so, müsste mal in den Abschnitt in meinem Buch schauen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von melodoi Beitrag anzeigen
    Also mir geht es darum ca. 150 MySQL-Datenbanken nach PostGre zu migrieren. Ja ich hab mir was mit VB gebastelt, weil der MySQL-Dump angepasst werden muss. Das Schema ist in PostGre schon fertig.

    Z.B. müssen in dem MySQL-Dump die einfachen Hochkommas raus.
    Wie ads schon sagte (ads: Seite 223 in Deinem Buch, zumindest in der mir vorliegenden Fassung) gibt es dafür schon fertige Scripte. mysql2pgsql, zu finden auf pgfoundry.

    Falls man sich dennoch was selbst basteln will, dann könnte man gleich aus INSERT dann COPY machen. Ich komme dazu noch später.

    Beim Einlesen ignoriere ich alles außer was mit 'Insert Into' beginnt. Somit lese ich aus dem MySQL-Dump nur diese raus und führe sie dann direkt auf die PostGre aus. Das geht super schnell.
    Schön. Führst Du alle Insert's in einer Transaktion aus? Aber, wie schon gesagt, COPY wäre erheblich schneller.
    PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: COPY

    Die Fehlermeldung kommt natürlich aus VB6.
    Dann bist Du damit hier allerdings flasch. Vermutlich frickelst Du in VB dir erst alle INSERT-Befehle für eine Tabelle zusammen und willst diese dann zur DB jagen. Dabei geht auf halben Wege VB die Puste, ähm, der Speicher aus. Das ist also ein reines Problem mit Deinem VB. Ich würd ja eh awk oder sowas nehmen...

    Was meist du mit copy?
    Guggst Du oben.

    Wie geht das denn mit der Teilung der Tabellen im MySQL-Dump?
    Guggst Du auch oben. Darfst halt nicht nicht wie ein Hamster alle Insert-Befehle in VB sammeln, bis die Backen, ähm, der Speicher platzt.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Lächeln

    Jetzt bin ich mir unsicher ob wir vom gleichen reden. Ein Bulk-Dump hat ein Insert Into pro Tabelle und dann eine Menge an Datensätzen die in Klammern eingeschlossen und mit Komma getrennt sind. Da muss ich nichts zusammensammeln. Das ist ein Input-Befehl und die ganze Tabelle steht in der Variable, außer (wie bei mir) wenn das Teil zu groß wird.

    Ich hab es aber gefunden: in der 'my-innodb-heavy-4G.ini' gibt es einen Eintrag der 'bulk_insert_buffer_size = 64M' heiß. Den habe ich auf '10M' verkleinert und nun werden mir die Tabellen kleiner übergeben, so wie ich es wollte.

    Applikationen zur DB-Migration oder Scripte wie "mysql2pg" hab ich mir angesehen. Entweder kosten sie Geld oder die Anwendung ist kompiziert. Ich hab jetzt eine saubere Lösung, mit der ich super schnell die 150 Datenbanken migrieren kann.

    Danke an alle!!!

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Zitat Zitat von melodoi Beitrag anzeigen
    Applikationen zur DB-Migration oder Scripte wie "mysql2pg" hab ich mir angesehen. Entweder kosten sie Geld oder die Anwendung ist kompiziert.
    Ersteres ist vielleicht richtig, zweiteres nicht.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von melodoi Beitrag anzeigen
    Jetzt bin ich mir unsicher ob wir vom gleichen reden. Ein Bulk-Dump hat ein Insert Into pro Tabelle und dann eine Menge an Datensätzen die in Klammern eingeschlossen und mit Komma getrennt sind. Da muss ich nichts zusammensammeln. Das ist ein Input-Befehl und die ganze Tabelle steht in der Variable, außer (wie bei mir) wenn das Teil zu groß wird.
    Ah, okay. Ich ging von massig vielen einzelnen INSERT-Befehlen aus, was lahm ist. Mit diesen Multi-Row-Inserts hab ich noch nicht groß gespielt, ist ja auch erst relativ neu.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    melodoi ist offline Neuer Benutzer
    Registriert seit
    05.01.2009
    Beiträge
    22

    Daumen runter

    Hallo Andreas,

    nun scheitere ich scheinbar doch an meinem Vorhaben das Dump selber in PostGres zu bekommen. Aber nur wegen den blob-Typen (bytea in PG).

    Ich hab es nun doch mal mit mysql2pgsql versucht und es auch zu Laufen gebracht (war wirklich nicht schwer). Dabei habe ich darauf geachtet, das ich UTF8 exportiere, so mit mysql2pgsql und auch wieder einlese. Klappt alles bis auf die binären Daten. Erstmal rödelt das Tool ewig (2 h für 500 MB) und zweitens wirft er Mahnungen ohne Ende raus (does not map to Unicode at mysql2pgsql.perl line 354 <IN> line 1187). Die Meldung kommt nur bei den binären Dateninhalten. In das pg-dump schreibt er die binären Daten zwar rein aber beim schreiben in die PostGres (mit psql) kommen massig Fehler (\x: extra argument "AB>" ignored). Das ist ein Fehler für jeweils 3 Ziechen aus den binären Daten. Für alle diese Fehler fehlen dann logischerweise auch die Datensätze in der PG.

    Kasst du was dazu sagen?

    Gruß Sylvio

  10. #10
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    ByteA Daten werden anders geschrieben (da sie \000 Bytes enthalten können). Diese Daten müssen gesondert escaped werden, auch in MySQL. Weiß nicht, ob das Skript zum Portieren das einfach so hinbekommt.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Problem bulk load über java
    Von MeisterU im Forum Programmierung
    Antworten: 10
    Letzter Beitrag: 16.03.2010, 14:38
  2. /var/lib/postgresql/ zu groß, wie aufräumen?
    Von davidy im Forum Allgemeines
    Antworten: 3
    Letzter Beitrag: 20.01.2010, 21:01
  3. Frage Replikation bei häufigen Bulk-Imports via COPY
    Von identify im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 14.01.2010, 10:30
  4. Groß und Kleinschreibung
    Von Sauerkraut im Forum SQL
    Antworten: 1
    Letzter Beitrag: 22.10.2007, 19:36
  5. Groß-/Kleinschreibung usw.
    Von the_french im Forum SQL
    Antworten: 5
    Letzter Beitrag: 15.03.2007, 18:29

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum