⚡ÖZET VE TEKNİK CEVAP
Tek bir veritabanında deadlock tespiti kolaydır: Veritabanı bellekte bir Wait-For Grafiği (WFG) tutar; düğümler işlemleri, oklar ise kilit bekleme bağımlılıklarını (T_1 o T_2) gösterir. Arka plan thread'i döngü taraması yapar; bir kapalı döngü (T_1 o T_2 o T_3 o T_1) bulursa en ucuz kurban işlemi (victim) iptal eder. Ancak dağıtık veritabanlarında veya mikroservislerde, Node A'daki İşlem 1 Node B'deki İşlem 2'yi beklerken, o da Node C'deki İşlem 3'ü, o da tekrar Node A'daki İşlem 1'i bekleyebilir. Hiçbir tek sunucu tüm grafiği tek başına göremez. Dağıtık sistemler bunu Kenar Takip Algoritmalarıyla (Edge Chasing - Mitchell-Merritt / Chandy-Misra-Haas) çözer: Bir işlem kilitte beklemeye başladığında kilit bağımlılıkları boyunca küçük bir 'Sonda' (Probe) mesajı gönderir. Bir işlem kendi attığı sondayı geri aldığında dağıtık bir kilitlenme döngüsü matematiksel olarak kanıtlanmış olur ve kurban işlem hemen iptal edilir.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
5 node'lu bir CockroachDB kümesinde İşlem 1 Node 1'de A Hesabını kilitleyip Node 2'deki B Hesabını istedi; aynı anda İşlem 2 Node 2'de B Hesabını kilitleyip Node 1'deki A Hesabını istedi. Kenar takip algoritması 8 milisaniyede Node 1'den Node 2'ye ve tekrar Node 1'e sondayı döndürdü. Döngü kanıtlanınca İşlem 1 kurban seçilip iptal edildi. İşlem 2 12 ms'de tamamlandı, İşlem 1 ise hemen ikinci denemesinde başarıyla bitti ve kullanıcıya hiçbir kilitlenme hissettirilmedi.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaDeadlock tespitinde 'Wait-For Grafiği' (WFG) nedir?
'Kenar Takip' (Edge Chasing) algoritması dağıtık sunucular arasındaki deadlock'ları nasıl tespit eder?
Dağıtık Deadlock Tespiti: Wait-For Grafikleri ve Kenar Takip (Edge Chasing) Algoritmaları — Sıkça Sorulan Sorular
'Wait-Die' ile 'Wound-Wait' deadlock önleme mekanizmaları arasındaki fark nedir?
Wait-Die'da yaşlı işlem genci bekler, genç işlem yaşlıyı beklemek yerine ölür. Wound-Wait'te ise yaşlı işlem gencin elindeki kilidi zorla alır (yaralar), genç işlemler ise yaşlıları bekler.
Kilitleri global olarak sıralı bir düzende (ör. Kaynak ID'sine göre) almak neden en iyi deadlock önleme yöntemidir?
Çünkü tüm işlemler kilitleri kesin artan sırada ($A o B o C$) alırsa, Wait-For grafiğinde yönlü kapalı bir döngü oluşması matematiksel olarak imkansız hale gelir.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Deadlocks occur when transactions hold locks the other needs in a circular dependency.
- ▸
A cycle in a directed Wait-For Graph mathematically proves a deadlock.
- ▸
Distributed Edge Chasing propagates probe tokens across nodes to detect multi-server cycles.
- ▸
Enforce global ascending lock ordering (A o B o C) to prevent deadlocks entirely.
Yaygın Yanılgılar
- ✗
Yanılgı: Increasing lock timeouts prevents deadlocks (Gerçek: It merely forces transactions to hang for longer before failing).
- ✗
Yanılgı: Distributed deadlocks cannot be resolved automatically (Gerçek: Distributed edge-chasing engines resolve deadlocks in single-digit milliseconds).
Karar Kılavuzu & Önceliklendirme
Sort all resource IDs before acquiring multi-row database locks in application code. Set strict lock_timeout (1-2 seconds) on all relational database transaction sessions.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]A Distributed Algorithm for Deadlock Detection and Resolution— D. P. Mitchell & M. J. Merritt (ACM PODC)
