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.
PostgreSQL too many clients already Hatası: 6 Adımda Çözüm
FATAL: sorry, too many clients already hatasının üç nedeni, nedeni ayırt eden tek sorgu ve max_connections ile PgBouncer üzerinden kalıcı çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
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.