DBAtlas · Veritabanı operasyon atlası

1206: The total number of locks exceeds the lock table size

MySQL

Ne demek?

InnoDB, tuttuğu lock'lar için ayrılan bellek (buffer pool içindeki lock yapısı) alanını tüketti. Tek bir transaction çok fazla row/range lock biriktirdiğinde ortaya çıkar ve transaction geri alınır.

Neden olur?

Çok büyük tek işlemler: milyonlarca satırı tek seferde UPDATE/DELETE etmek, WHERE koşulunun index'siz olup tüm tabloyu kilitlemesi, ya da innodb_buffer_pool_size'ın iş yüküne göre küçük olması. Büyük toplu (batch) işlemler klasik tetikleyicidir.

Nasıl çözülür?

Büyük DML'i küçük partilere bölün (ör. LIMIT ile döngüde 10.000'er satır silin/güncelleyin ve her partiden sonra COMMIT edin). WHERE koşullarını indeksleyerek kilitlenen satır sayısını azaltın. Kalıcı çözüm olarak innodb_buffer_pool_size değerini artırın (lock yapıları buradan beslenir). Gereksiz uzun transaction'lardan kaçının.

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar