MySQL "Lock wait timeout exceeded" — Kim Kilitliyor, Kimi KILL Etmeli?
1205 lock wait timeout hatasında bloklayan işlemi performance_schema ile bulma, KILL kararını verme ve kilidi kalıcı olarak azaltma yöntemleri.
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transactionDeadlock'tan farkı kritiktir: deadlock'ta döngü vardır ve InnoDB müdahale eder; burada döngü yoktur, sadece bir işlem diğerini bekler ve süre dolar. Varsayılan bekleme süresi innodb_lock_wait_timeout = 50 saniyedir.
▸Bloklayan işlemi bulma
En kritik nokta: şikayet eden sorgu değil, onu bekleten süreç suçludur.
SELECT w.requesting_engine_transaction_id AS bekleyen_trx,
w.blocking_engine_transaction_id AS bloklayan_trx,
b.trx_mysql_thread_id AS bloklayan_thread,
b.trx_state AS bloklayan_durum,
TIMESTAMPDIFF(SECOND, b.trx_started, NOW()) AS acik_saniye,
b.trx_query AS bloklayan_sorgu,
r.trx_query AS bekleyen_sorgu
FROM performance_schema.data_lock_waits w
JOIN information_schema.innodb_trx b
ON b.trx_id = w.blocking_engine_transaction_id
LEFT JOIN information_schema.innodb_trx r
ON r.trx_id = w.requesting_engine_transaction_id
ORDER BY acik_saniye DESC;- •
trx_query = NULLveacik_saniyeyüksekse: uygulamaBEGINaçmış, hiçbir şey yapmıyor veCOMMITetmemiş.
▸KILL kararı
- •Önce `NULL` sorgulu, uzun süredir açık transaction'ı öldürün.
- •Bekleyen sorguyu öldürmeyin. Öldürürseniz uygulama hata alır, kilit sahibi yerinde kalır ve sorun saniyeler içinde tekrarlar.
KILL 4821; -- bağlantıyı sonlandırır, transaction'ı geri alır
KILL QUERY 4821; -- yalnızca çalışan sorguyu durdurur, bağlantı açık kalır▸En sık üç neden
- 1Kapanmayan transaction: Uygulama
commit()çağırmıyor. - 2İndekssiz `UPDATE`/`DELETE`: Milyonlarca satır taranır ve kilitlenir.
- 3Metadata lock (MDL): Bekleyen bir
ALTER TABLE, o tabloya gelen tüm sorguları kilitler.
SELECT object_type, object_schema, object_name, lock_type, lock_duration, owner_thread_id
FROM performance_schema.metadata_locks
WHERE object_schema NOT IN ('performance_schema', 'mysql');▸İlgili Mühendislik Rehberleri ve İç Linkler
- •MySQL Deadlock (ERROR 1213) Çözümü
- •MySQL InnoDB Tuning CheatSheet
- •Test edilen sürümler: MySQL 8.0 / 8.4 LTS
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.
MySQL Deadlock ERROR 1213: Grafiği Okuma ve Kalıcı Önleme
MySQL 1213 deadlock hatasının nedeni, LATEST DETECTED DEADLOCK çıktısını okuma, gap lock kaynaklı kilitlenmeler ve uygulama tarafında retry tasarımı.
MySQL 1452 Foreign Key Constraint Fails: Neden ve Çözüm
1452 ve 1451 hatalarının farkı, karakter seti/veri tipi uyuşmazlığı, yetim satırları bulma sorgusu ve toplu yüklemede doğru yöntem.