Verbessern Sie die Leistung bei SOAP-Aufrufen

13

Ich habe ein Leistungsproblem mit Magento 2.1

In meinem Shop habe ich 90.000 Produkte. Ich habe diese Produkte Seife hinzugefügt. Als ich dies tat, dauerte es ungefähr 7 Sekunden für jeden Artikel (Produkt?) (Anfrage> Antwort). Zusammenfassend kann gesagt werden, dass es einige Tage gedauert hat, bis alle Produkte in Betrieb genommen wurden.

Jetzt sind alle Produkte im Shop. Alle paar Wochen muss ich einige Dinge über die Artikel (Produkte) aktualisieren. Wenn ich das wieder mit Seife mache, dauert es genauso lange. Wenn ich Updates mache, ist der Shop unbrauchbar. Eine beispielhafte Anfrage und Antwort finden Sie hier: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Mein Server verfügt über eine 12-Kern-CPU, 24 GB RAM und eine SSD. Es läuft Ubuntu 16.04 mit Apache2 PHP7-fpm und MySQL.

Wenn ich mir den Update-Prozess ansehe, sehe ich, dass 5 Kerne mit MySQL zu 100% laufen. PHP funktioniert ein bisschen und der Rest ist inaktiv. Der RAM ist nur eine kleine Menge verwendet, iotopsagt, dass meine SSD sich langweilt.

Ich habe die Datenbankleistung beobachtet und festgestellt, dass Magento beim Hinzufügen tausender Befehle zur Datenbank ausgelöst hat. Ist das ok?

Wenn ich es mit dem Magento CSV-Import aktualisiere, ist es viel schneller.

Was kann ich tun, um Magento2 zu beschleunigen? In dieser Situation ist es unmöglich, mit diesem Geschäft gut zu arbeiten.

Tadeus
quelle
Welche Erweiterungen verwenden Sie? Das Problem kann mit einer Ihrer Erweiterungen zusammenhängen.
Bunyamin Inan
@tadeus Hast du deine Geschwindigkeitsprobleme in den letzten 2 Jahren gelöst? Wenn nicht, HAFTUNGSAUSSCHLUSS: Ich bin der Inhaltsautor der in meinem Profil, Netzwerkprofil, genannten Website, auf der wir kostenlose Hilfsskripte zur Verbesserung der Leistung und anderer Analysis Services haben.
Wilson Hauck

Antworten:

1

Massenimport

Der Schlüssel ist der Batch-Import, wie Sie selbst erwähnt haben:

Wenn ich es mit dem Magento CSV-Import aktualisiere, ist es viel schneller.

Überlegen Sie, ob Sie Ihre SOAP-API überdenken und in einen Massenmodus ändern möchten. Sie können beispielsweise eine Middleware erstellen, die Ihre Produktdaten akzeptiert, und eine CSV-Datei erstellen, die später in Magento eingespeist werden kann.

Es gibt einige Erweiterungen von Drittanbietern, die dabei helfen.

Allgemeine Leistungsempfehlung

Sie können versuchen, Magento selbst zu beschleunigen, aber Sie erhalten von jeder Verbesserung ~ 1-10% Boost. Wenn Sie mehrere davon ausführen, wird der Vorteil vervielfacht:

  1. Stellen Sie sicher, dass Sie keinen ineffizienten Code haben
    1. Stellen Sie sicher, dass Ihr Code keine Hinweise / Fehler / Warnungen erzeugt
    2. Stellen Sie sicher, dass die installierten Erweiterungen keine teuren Ereignis-Listener enthalten (von Drittanbietern oder von Ihnen selbst).
  2. Wenn Sie alle Hinweise und Warnungen entfernt haben, können Sie die Protokollierung deaktivieren.
  3. Überprüfen Sie, welche Magento- und Drittanbieter-Erweiterungen Sie nicht verwenden, und können Sie deaktivieren. Weitere Informationen finden Sie unter Welches Modul kann ich in Magento 2 deaktivieren? als Referenz.
  4. Befindet sich Ihr Datenbankserver auf demselben Computer wie die Magento-Anwendung, stellen Sie sicher, dass Sie anstelle einer TCP / IP-Verbindung einen Linux-Socket verwenden.
  5. Wenn sich Ihr Datenbankserver nicht auf demselben Computer wie die Magento-Anwendung befindet, stellen Sie sicher, dass PHP die DNS-Auflösung nicht jedes Mal ausführen muss, wenn die Datenbank abgefragt wird.
  6. Überprüfen Sie den Rat zur Optimierung der Datenbankleistung, Percona-Artikel wurde bereits in einer der Antworten erwähnt. Überprüfen Sie auch https://github.com/major/MySQLTuner-perl
  7. Prüfen Sie die Indizierungsmodi von magento, wechseln Sie nach Zeitplan in den Indizierungsmodus und führen Sie jede Nacht oder nach Abschluss des Imports eine Neuindizierung durch, nicht beim Speichern des Produkts. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Wenn all das erledigt ist und Sie mehr Leistung benötigen:

  • Profilieren Sie Ihre Anwendung mit xDebug oder Blackfire, suchen Sie nach Engpässen und versuchen Sie, diese zu beseitigen.
  • Fragen Sie nach, aber seien Sie genauer. Erklären Sie, was genau Sie im Moment verbessern möchten.
  • Bitten Sie einen Magento-Partner oder einen zertifizierten Magento-Entwickler um Hilfe.
Anton Boritskiy
quelle
0

Das Problem hierbei ist, dass die SOAP-Aufrufe sehr teuer sind. Wenn Sie eine SOAP-Anfrage starten, um ein Produkt hinzuzufügen, zu bearbeiten oder zu löschen, muss Magento viele Tabellen verknüpfen, um alle erforderlichen Informationen zu erhalten. Dieses Verhalten in Kombination mit PHP selbst verlangsamt die Anzahl der zu verarbeitenden Produkte oder Daten.

Magento selbst empfiehlt einen Server-Cluster mit 5 Knoten (1 x DB, 4 x Webserver), um den Datenverkehr zu verarbeiten.

Ich würde empfehlen, horizontal zu skalieren, zum Beispiel mit AWS. Dies könnte größere Auswirkungen auf Ihr Unternehmen haben, aber IMHO können Sie Magento nicht optimieren, um eine bessere Leistung zu erzielen.

In AWS sollten Sie die Funktion einer Autoscaling-Gruppe verwenden, die für die Anzahl der von Ihnen gestarteten Server verantwortlich ist. Jedes Mal, wenn Sie die Daten hinzufügen, werden neue Server gestartet, um den Druck zu bewältigen. Gleiches kann mit AWS RDS (DB Service) sehr einfach und schnell erledigt werden.

Falls AWS überhaupt keine Option ist, können Sie versuchen, Magento und PHP zu optimieren. Ich würde empfehlen, die Einstellungen zu überprüfen für:

David Lambauer
quelle
0

Dieser Link erklärt, wie Sie die MySQL-Speichernutzung optimieren. Da Sie so viel RAM haben, können Sie davon profitieren, MySQL mehr zuzuweisen. Dies ist möglicherweise eine einfachere und kostengünstigere Lösung zum Aufbau eines dedizierten Datenbankservers.

https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

Außerdem kann das MySQL Workbench-Dienstprogramm hilfreich sein, um Sie bei dieser Optimierung und Überwachung der allgemeinen Funktionsweise von MySQL zu unterstützen. Das Dienstprogramm wird von Oracle / MySQL erstellt. Es ist keine zufällige Shareware-App.

https://dev.mysql.com/downloads/workbench/

Plotkin
quelle