Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Timeout für Sperrwartezeit überschritten

Ich stimme Erik zu; TRUNCATE TABLE ist der richtige Weg. Wenn Sie das jedoch aus irgendeinem Grund nicht verwenden können (zum Beispiel, wenn Sie es wirklich nicht tun jede Zeile in der Tabelle löschen möchten), können Sie die folgenden Optionen ausprobieren:

  • Löschen Sie die Zeilen in kleineren Stapeln (z. B. DELETE FROM bundle_inclusions WHERE id BETWEEN ? and ?)
  • Wenn es sich um eine MyISAM-Tabelle handelt (tatsächlich könnte dies auch mit InnoDB funktionieren), versuchen Sie, vor dem DELETE eine LOCK TABLE auszugeben. Dies sollte garantieren, dass Sie exklusiven Zugriff haben.
  • Wenn es eine InnoDB-Tabelle ist, dann nach Wenn die Zeitüberschreitung auftritt, verwenden Sie SHOW INNODB STATUS. Dies sollte Ihnen einen Einblick geben, warum die Übernahme der Sperre fehlgeschlagen ist.
  • Wenn Sie das SUPER-Privileg haben, können Sie SHOW PROCESSLIST ALL ausprobieren, um zu sehen, welche anderen Verbindungen (falls vorhanden) die Tabelle verwenden, und dann KILL verwenden, um diejenige(n) loszuwerden, mit denen Sie konkurrieren.
  • li>

Ich bin sicher, es gibt viele andere Möglichkeiten; Ich hoffe, einer davon hilft.