1206: The total number of locks exceeds the lock table size
MySQLWas bedeutet das?
InnoDB hat den für seine Sperren reservierten Speicher (die Lock-Strukturen im Buffer Pool) erschöpft. Tritt auf, wenn eine einzelne Transaktion zu viele Zeilen-/Gap-Locks ansammelt; die Transaktion wird zurückgerollt.
Ursache
Sehr große Einzeltransaktionen: UPDATE/DELETE von Millionen Zeilen auf einmal, eine WHERE-Klausel ohne Index, die die ganze Tabelle sperrt, oder ein für die Last zu kleines innodb_buffer_pool_size. Große Batch-Jobs sind der klassische Auslöser.
Lösung
Teile großes DML in kleine Batches auf (z. B. jeweils 10.000 Zeilen mit LIMIT in einer Schleife löschen/aktualisieren und nach jedem Batch COMMIT). Indiziere die WHERE-Spalten, um die Zahl gesperrter Zeilen zu senken. Erhöhe als dauerhafte Lösung innodb_buffer_pool_size (die Lock-Strukturen werden daraus allokiert). Vermeide unnötig lange Transaktionen.
Weitere Einträge zu dieser Datenbank
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value
- 1049Unknown database 'name'
- 1364Field 'name' doesn't have a default value
- 1236Got fatal error 1236 from master when reading data from binary log
- 1129Host 'host' is blocked because of many connection errors
- 1194Table 'name' is marked as crashed and should be repaired
- 1615Prepared statement needs to be re-prepared