dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Kütüphanesi/MySQL/mysql-lock-wait-timeout
MySQL
MySQL 8.0 / 8.4
5 dk okuma
ERROR 1205 (HY000): Lock wait timeout exceeded

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.

Standart:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: MySQL 8.0 / 8.4 LTS
İlk 60 Saniye Teşhis Protokolü:

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

plaintext
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

Deadlock'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.

sql
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 = NULL ve acik_saniye yüksekse: uygulama BEGIN açmış, hiçbir şey yapmıyor ve COMMIT etmemiş.

▸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.
sql
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

  1. 1Kapanmayan transaction: Uygulama commit() çağırmıyor.
  2. 2İndekssiz `UPDATE`/`DELETE`: Milyonlarca satır taranır ve kilitlenir.
  3. 3Metadata lock (MDL): Bekleyen bir ALTER TABLE, o tabloya gelen tüm sorguları kilitler.
sql
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

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (20)