Ich hätte da ne Frage, ich versuche hier einen Shop von Version 5 zu 6 zu migrieren. Der Shop hat allerdings extrem vielen Produkte über 250k und ungefähr an 200GB Bilddateien. Wenn ich diesen Prozess jetzt per Shopware Migration starte, dauert es extrem langsam, ungefähr 2000 Produkte in ein paar Stunden, außerdem läuft der Ram vom Worker 7GB voll, so das sich diesen Worker immer wieder neu starten muss. Bei der Dauer würde ich für den Import mehr als 1nen Monat benötigen, und das sind nur die Produkte selbst.
Meine Frage ist jetzt, kann man dieses irgendwie beschleunigen? (andere Tools, Services etc).
Import passiert nicht über die API sondern per DB/Fileordner Zugriff.
Zum Worker generell, persönliche Meinung. Ich würde den nie unendlich laufen lassen, sondern immer wieder per timeout unterbrechen und neu starten. So kommst du nicht in die Verlegenheit mit den vielen blockierten GB an RAM.
Dein Flaschenhals ist sehr wahrscheinlich die Datenbank. Der Migrationsassistent loggt jeden Vorgang, wodurch die x-fache Datenmenge anfällt. Das Logging auf das Minimalste zu reduzieren würde vermutlich schon viel bringen.
Ansonsten schaue, dass die Migration keine Fehler aufwirft (siehst du ironischer weise nur in den Logs).
Ja, da könntest alles manuell per SQL direkt ohne Logging etc. von A nach B transferieren. Aber das müsstest du halt selbst angehen.
Auf jeden Fall vorab die SW5-Datenbank für SW6 vorbereiten und bereinigen, z.B.:
Kunden ohne Anreden
Kunden ohne Vorname, Nachname
Bestellungen ohne Kunden, Versand-/Zahlungsarten
Adressen oder Vorname oder Nachname
…
Das lässt sich am einfachsten direkt über SQL-Befehle prüfen/bereinigen.
Nur als Auszug. Das sind alles Daten, die nicht migriert werden können und die dann fehler werfen. Ob das Logging bei der Migration überhaupt deaktiviert werden kann (und das Sinn macht), weiß ich gar nicht genau.
Auf jeden Fall beide Shops im Prod-Modus betreiben. Und den Worker wie @Max_Shop beschrieben hat auf Zeit/Speicher beschränken und lieber periodisch oft laufen lassen.
Mal ne Frage, wenn ich den Worker mittels „bin/console messenger:consume async low priority --time-limit=60“ starte, startet er dann nach 60 wieder neu, oder muss ich das dann wieder per Hand starten?
Nein, er beendet sich nur nach ca. 60 Sekunden. Du musst einen Cronjob alle 60 Sekunden mit diesem Befehl einrichten. Oder besser etwas länger, z.B. alle 70 Sekunden.
Hm, Migrationen sind immer sehr unterschiedlich. So genaue Aussagen kann man aus der Ferne gar nicht treffen wenn man die Ausgangslage nicht kennt. Was ich machen würde (beruht auf meine bisherigen Erfahrungen) dass ich den RAM für die Migration hoch setze und danach wieder zurück. Gut, das geht natürlich nur wenn man selber Hostet.
Produkte und Medien würde ich zudem als getrennte Migrations-Prozosse laufen lassen. Also erst nur Produkte und später die Medien. Der eigentliche Donwload findet im Hintergrund statt.
Was vielleicht noch zu erwähnen wäre, dass der SW6 Shop unbedingt in Produktiv-Modus läuft. In der „.env“ bzw. auch „.env.local“ also „APP_ENV=prod“. Sonst wird ggf. das Migrationslog extrem groß und du bekommst Probleme das auszuwerten.
Und ja, es gibt Migrationen die auch schon mal eine Woche laufen. Diese schmerzhaften Erfahrungen musste ich auch schon machen. Ich hoffe, dass sein SW5 nicht ganz so alt ist. Da können Überraschungen folgen