Kunden-Import via REST Resource: Performance nimmt exponentiell ab

Guten Morgen liebes Forum,

Ich habe folgendes Problem:

Ausgangssituation:
Mein Plugin importiert mittels CLI Command ca. 20.000 Kundendatensätze und verwendet dazu die REST Resourcen “customer” und “address”. Das ganze läuft auf Debian 8, MySQL DB auf einem getrennten Host.

Das Problem:
Beim Start des Importvorgangs wird die CPU bei einem Core zu 100% ausgelastet, was bei dem Prozess via CLI IMO absolut ok ist. Speicher wird auch sauber belegt (kein swappen). Das Interessante dabei: Mit fortlaufender Dauer wird der Importvorgang exponentiell langsamer. Die ersten 1000 Kunden werden binnen einer Stunde importiert, für die nächsten 4000 hat das System bereits 12 Stunden gebraucht. Aktuell benötigt er für einen Kundendatensatz zwischen 5 und 10 Sekunden.

Serverseitig sieht alles wie zu Beginn aus: 100% CPU Load, normale Speicherauslastung. Nachdem sich der benötigte Plattenplatz auch nicht ändert schließe ich ein Caching-Problem eigentlich ebenfalls aus.

Hatte jemand von Euch schon mal ein ähnliches Problem? Oder noch eine Idee?

Danke & LG

Habe leider vor ca. einem Jahr die gleiche Erfahrung gemacht und hatte so 4 bis 5 mal mehr Datensätze. Ich bin dann innerhalb eines eigenen Scripts, basierend auf GitHub - bisight/etl: BiSight ETL: Extract, Transform, Load toolkit, auf natives SQL umgestiegen (also kein Doctrine).

Das wäre bei mir auch der letzte Ausweg, da dadurch sämtliche Validierungsprozesse umgangen werden. Nachdem wir aber auch die Registration-Services dekorieren, müsste ich dann auch diese gesamte Logik manuell implementieren.

Konntest Du das Problem zu 100% bei Doctrine festmachen?

Nein, ich habe nur den Performance Einbruch beim testen festgestellt.

Ich konnte das Problem lösen:
Die create bzw. batch methode der Resource wird in meinem Fall iterativ aufgerufen. Ein manueller Aufruf von $resource->flush() IN der Iteration hat das Problem gelöst. Offenbar ist der manuelle Flush hier deutlich dem automatischen Flush vorzuziehen.