Magento Deadlocks

9

Ich benutze Magento 1.7.0.2 Community Edition und ich habe ein großes Problem festgestellt - Deadlocks und "Lock wait timeout exceeded" -Fehler. Problem existiert, während bestimmte CRON Aufgaben ausgeführt werden

  • Importieren / Aktualisieren von Produkten (Größen, Farben, Hersteller). Es gibt ungefähr 5000 Produkte, aber in 90% Skript bekommt "Lock Warte Timeout überschritten" Fehler oder ein Deadlock-Fehler. Das Skript wird mithilfe von Magento-Richtlinien entwickelt und funktioniert einwandfrei, wenn keine anderen Prozesse ausgeführt werden. Zum Beispiel, wenn Reindex läuft, erhalten wir einen Fehler mit Sicherheit. Das liegt daran, dass Tabellen gesperrt sind
  • Magento setzt in einigen Fällen eine Lesesperre. Ich habe bereits einige Themen dazu gelesen und die einzige passende Lösung scheint sich zu ändern: /lib/Zend/Db/Statement/Pdo.php _execute Funktion. Da wir uns darauf freuen, Magento auf die neueste stabile Version zu aktualisieren, können wir es uns nicht leisten, Kerndateien zu ändern.

Also meine Frage - gibt es eine Möglichkeit, dies zu vermeiden (ob auf PHP, MySQL oder Server (wir benutzen nginx) Ebene)?

    
werd 09.11.2012, 13:50
quelle

5 Antworten

9

Ich stieß auf dieses Problem, als ich versuchte, mehr als fünf oder sechs Produkte gleichzeitig zu importieren. Es gibt weitere Informationen zu Deadlocks verfügbar hier .

Um dieses Problem zu lösen, musste ich meine Datenbankabfragen in SERIALIZABLE Transaktionen wo möglich, so:

%Vor%

Transaktionsbeispiel:

%Vor%

Wenn Sie weitere Hilfe benötigen, können Sie mich gerne darüber informieren.

    
james 12.11.2012, 20:39
quelle
4

Wir hatten ein ähnliches Problem mit Deadlocks, die einige Male am Tag auftauchten, als Kunden versuchten, etwas in ihren Einkaufswagen zu legen. Unseres schien auch damit zu tun zu haben, dass ein Index zu dieser Zeit aktualisiert wurde (höchstwahrscheinlich ein Neuindex der Katalogtabelle). Das einzige, was uns letztendlich das Problem besorgt hat, war die Implementierung der asynchronen Neuindizierung (wir kauften eine Erweiterung).

    
fr0x 24.05.2013 15:09
quelle
3

Wir haben dieses Problem ebenfalls untersucht und versucht, Produkte parallel zu speichern.

Das Hauptproblem, mit dem wir konfrontiert waren, bestand darin, dass nach der anfänglichen Speicherung eines Produkts die nachfolgenden Indexierungsprozesse nicht durch die Transaktion zur Produkteinsparung abgedeckt wurden. Wenn wir also in einen Deadlock gerieten, wurde dies durch den Indexer verursacht. Um dies zu verhindern, hatten wir eine inkonsistente Datenbank, die ungültige Produkt-URLs verursachte und uns zwang, alles neu zu indizieren, wenn es passierte.

Die Lösung, die wir am Ende hatten, bestand darin, den Indexer in die Transaktion einzubeziehen und eine Transaktion, die in einem Deadlock endete, erneut zu versuchen. Dies ist jedoch keine ideale Lösung, es ist eher das Beste, was wir uns vorstellen können und es funktioniert in 99% der Fälle.

Das Problem mit Magento ist, dass die Programmierung lappig ist und der ereignisgesteuerte swiss-army-knife-Ansatz für die Codierung zu vielen tiefgreifenden Problemen in der inneren Mechanik von Magento führt.

Unser nächster Ansatz wird unsere eigene, von Grund auf neu geschriebene Schnittstelle sein, um Produkte parallel zu speichern und die Datenbank mit dem gleichen Ergebnis zu verlassen, wie es ein Magento-Save hätte. Dies bedeutet natürlich, dass wir Erweiterungen nicht mehr hinzufügen können, ohne sie in das neue Konzept zu integrieren, falls sie produktbezogen sind.

    
greenone83 09.10.2013 07:07
quelle
0

Ich setze meinen Index-Modus auf MANUAL, bevor ich mit CRON-Skripten importiere.

%Vor%     
Kurdt94 08.12.2015 08:51
quelle
0

Hier ist eine großartige Open-Source-Lösung - Ссылка

Dieses Modul ist sehr einfach und konzentriert sich auf eine Aufgabe. Er ersetzt den DB-Adapter durch eine erweiterte Version, die Abfragen erneut versucht, wenn die Verbindung unterbrochen wird, die Abfrage keine erforderliche Sperre erhalten kann oder ein Deadlock auftritt. Diese drei Situationen werden über Ausnahmemeldungen erkannt. Der zugrundeliegende (übergeordnete) Code umschließt tatsächlich mindestens eine dieser Ausnahmen innerhalb einer anderen Ausnahme, so dass wir dies überprüfen und die Ausnahme bei Bedarf entfernen.

    
FireBear 05.04.2018 21:24
quelle

Tags und Links