2017-06-07 4 views
0

Ich habe insert/update verwendet, um eine Tabelle in MySQL von SQL Server zu aktualisieren oder einzufügen. Der Job ist als Cronjob eingerichtet. Der Job wird alle 8 Stunden ausgeführt. Die Anzahl der Datensätze in der Quelltabelle beträgt etwa 400000. Alle 8 Stunden können etwa 100 Datensätze aktualisiert oder eingefügt werden.Talend - Einfügen/Update versus Tabelle-Datei-Tabelle

Ich führe den Job so weg, dass ich auf Quellniveau nur die modifizierten Läufe zwischen dem letzten Lauf und dem aktuellen Lauf nehme.

Ich habe beobachtet, dass nur zum Aktualisieren/Einfügen von 100 Zeilen die Zeit 30 Minuten beträgt.

Eine andere Möglichkeit bestand jedoch darin, alle 400000 in einer Datei auszugeben und dann die Zieltabelle abzuschneiden und alle diese Datensätze erneut einzufügen. Dieser Prozess wird bei jedem Job ausgeführt

So, jetzt kann ich wissen, warum dauert Insert/Update so viel Zeit?

Dank Rathi

Antwort

0

Wie Sie gesagt haben Sie den Job in einer solchen weggelaufen, dass auf Quellebene, ich die modifizierten verläuft zwischen dem letzten Lauf nur nehmen und den aktuellen Lauf.

  • So legen Sie einfach diese alle geänderten Zeilen in eine temporäre Tabelle
  • Nehmen Sie die min Datum Änderungsdatum von temp-Tabelle oder die gleichen Kriterien verwenden, die Sie nur die geänderten Zeilen aus der Quelle zu extrahieren verwenden, um und löschen Sie alle Zeilen aus die Zieltabelle.
  • Dann können Sie alle Zeilen von Temp zu Ende Tabelle einfügen.

Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

+0

Hallo Sharad, aber löschen ist wieder eine teure Operation. Ich würde gerne wissen, was die Ursache für eine Verzögerung beim Einfügen/Aktualisieren ist. Oder wenn Löschen die einzige Option ist? –

0

Ohne zu wissen, wie Ihre Datenbank konfiguriert ist, ist es schwierig, den genauen Grund zu nennen, aber ich würde sagen, dass die Aktualisierungen langsam sind, weil Sie keinen Index für Ihre Zieltabelle haben. Versuchen Sie, einen Index für Ihre Insert/Update Key-Spalte hinzuzufügen.
Machst du auch nach jedem Einsatz ein Commit? Wenn ja, deaktivieren Sie Autocommit und commit nur bei Erfolg wie folgt: tMysqlOutput -- OnComponentOk -- tMysqlCommit.

+0

Hallo iMezouar, ich werde versuchen, Ihre Lösungen. Vielen Dank!!! –

+0

Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen;) – iMezouar

+0

Sure :) Danke !! –