Frage

Ich weiß, dass Deadlocks zwangsläufig auftreten, wenn Transaktionen in InnoDB verwenden und dass sie harmlos sind, wenn sie richtig durch den Anwendungscode behandelt werden -. „Es nur versuchen Sie es erneut“, wie das Handbuch sagt

Also ich frage mich - wie erkennen Sie Deadlocks? Herausgibt ein Deadlock einige spezielle MySQL-Fehlernummer? Ich bin mit PHP mysqli-Erweiterung wenn es ankommt.

Danke.

Edit: Lösung gefunden, siehe Kommentare

War es hilfreich?

Lösung

http://dev.mysql.com/ doc / refman / 5.0 / de / innodb-error-codes.html

  

1213 (ER_LOCK_DEADLOCK)

     

Transaktions Deadlock. Sie sollten erneut ausführen   die Transaktion.

Andere Tipps

"SHOW ENGINE BDB STATUS" aus dem MySQL-Kommandozeilen-Client (keine Abfrage-Browser) gibt Ihnen Informationen über Deadlocks.

Deadlocks können auch durch nicht abgeschlossene Transaktionen (in der Regel Programmfehler) und der Person verursacht werden, die die nicht ausgeführten Transaktion ausgeführt wird, wird das Problem nicht sehen, wie sie (über ihre Daten werden nicht verpflichtet) fein arbeiten werden.

Versuchen Sie Maatkit . Es hat einen Deadlock-Logger.

Versuchen Sie es mit MONyog . Aktivieren MONyog der „Deadlock Monitoring“ Option, um die Blockierungen durch INNODB STATUS berichtet zu verfolgen. MONyog wird eine Benachrichtigung an den Benutzer senden, wenn eine neue Deadlock auftreten. eingeben Bild Beschreibung hier

Versuchen innotop, wird aus der Sackgasse für Sie ermitteln.

Wenn Sie auf einem Mac:

$ brauen installieren Percona-Toolkit

$ pt-Deadlock-Logger -uroot --ask Passlocalhost

Ich habe vor kurzem eine sehr einfache Prüfung für Deadlocks für die Durchführung eines Rauchtest eines Web applciation. Code kann viel verbessert werden, aber es funktioniert jetzt. Siehe https://dev.mysql.com/doc /refman/8.0/en/innodb-standard-monitor.html für weitere Informationen über die Ausgabe der verwendeten Abfrage unten.

$status = DB::select("SHOW ENGINE INNODB STATUS")["Status"]??null;

if(strpos($status,"LATEST DETECTED DEADLOCK") !== false)
{
  trigger_error("LATEST DETECTED DEADLOCK section present in output of SHOW ENGINE INNODB STATUS");
}

if(strpos($status,"LATEST FOREIGN KEY ERROR") !== false)
{
  trigger_error("LATEST FOREIGN KEY ERROR section present in output of SHOW ENGINE INNODB STATUS");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top