Lock wait timeout yavaş sorgu değildir
Bir sorgu 50 saniye bekleyip hata verdiğinde ilk refleks indeks aramak olabilir. Ama lock wait timeout çoğu zaman sorgunun hesap yapmasından değil, başka bir transaction’ın tuttuğu kilidi beklemesinden kaynaklanır.
Bu ayrımı doğru yapmak önemlidir. İndeks eklemek bazı kilitleri azaltabilir ama açık kalmış transaction, yanlış sırada güncelleme veya büyük toplu işlem varsa asıl sorun devam eder.
- Bekleyen sorgu mağdur olabilir; suçlu kilidi tutan sorgudur.
- Uzun transactionlar satır kilitlerini gereğinden fazla tutar.
- Toplu UPDATE/DELETE işlemleri küçük parçalara bölünmelidir.
- Kilit sorununda restart son çare olmalı, önce kanıt toplanmalıdır.
Kimin kimi beklettiğini bulun
MySQL 8 tarafında performance_schema ve sys tabloları kilit beklemelerini anlamak için değerlidir. Ama her ortamda bu görünümler aynı açıklıkta olmayabilir. En azından processlist ve InnoDB status çıktısı alınmalıdır.
Olay anında bu çıktıları saklamak, sonradan kök nedeni bulmayı kolaylaştırır. Sorun düzeldikten sonra kanıt yoksa aynı hata tekrarlandığında ekip yine tahminle ilerler.
Kilit bekleme kontrolü
select * from sys.innodb_lock_waits\G show full processlist; show engine innodb status\G
Müdahale etmeden önce iş etkisini anlayın
Kilit tutan oturumu sonlandırmak bazen doğru karardır; ama neyi yarıda keseceğinizi bilmeden yapılırsa daha büyük sorun çıkarabilir. Ödeme, stok, fatura veya migration işlemi ortadaysa karar iş tarafıyla birlikte verilmelidir.
Eğer kilitleyen işlem rapor veya bakım işi ise durdurmak daha kolay olabilir. Eğer canlı kullanıcı işlemi ise uygulamanın tekrar deneme davranışı ve veri tutarlılığı düşünülmelidir.
Son çare oturum sonlandırma
-- Önce processlist içinden doğru id bulunmalıdır. kill 12345;
Bu adım kanıt toplandıktan ve iş etkisi anlaşıldıktan sonra düşünülmelidir.
Tekrarı önlemek için transaction disiplinine bakın
Kilit beklemelerini azaltmanın kalıcı yolu, transactionları kısa tutmak, kullanıcı etkileşimiyle transaction açık bırakmamak, güncelleme sırasını standartlaştırmak ve büyük değişiklikleri parçalara bölmektir.
Ayrıca foreign key ve indeks eksikleri de kilit alanını büyütebilir. Yavaş sorgu ve kilit analizi birlikte okunursa sorun daha net görünür.