2016-05-31 5 views
-1

gibt es ein großes Update:InnoDB, die Aktualisierung Tausende von Datensätzen führen Sperre Timeout

UPDATE myBigTable SET x=0; 

, die getan werden kann nicht, ich SQL-Fehler erhalten (1205), Lock-Zeitlimit überschritten. Ich habe versucht, Autocommit auszuschalten, immer noch kein Ergebnis. Wie aktualisiere ich dann?

EDIT: Ich habe versucht, autocommit abzuschalten, noch keine Freude

+3

Haben Sie darüber nachgedacht, es zu knacken? Etwas wie 'UPDATE myBigTable SET x = 0 WO x! = 0 LIMIT 10000;' und Schleife, bis es fertig ist? – ceejayoz

Antwort

1

Sie können versuchen, die Sperrzeitperiode wie folgt zu erhöhen:

mysql> set innodb_lock_wait_timeout=100 

wo 100 in Sekunden.

Oder Sie können versuchen, den Prozess zu töten, die tatsächlich Ihren Prozess blockiert wie:

mysql> kill processId; 
+0

Ich habe versucht, aber es endet nie –

+0

Ich versuchte autocommit abzuschalten, noch keine Freude –

+0

nur die Sperre Timeout zu erhöhen, ist keine Lösung. Art und Weise OP durchführen Update sollte nie in Echtzeit erfolgen. – Rahul

0

gibt es ein großes Update:

Sind Sie wirklich sicher, dass Sie alle zu aktualisierenden Ihrer Tischaufzeichnungen? Was Sie gerade tun, sieht nicht korrekt aus. Sie sollten wahrscheinlich die Filterbedingung A where in Erwägung ziehen und ein Update durchführen. wie UPDATE myBigTable SET x=0 WHERE id = value; Wenn Sie wirklich vollständige Tabelleneinträge aktualisieren möchten, dann sollten Sie es lieber im Batch als im Einzelschritt verwenden.

Verwandte Themen