SQL Server Error 1205: "Deadlock victim" — Grafiği Nerede Bulurum?
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme 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
Transaction (Process ID 87) was deadlocked on lock resources with another
process and has been chosen as the deadlock victim. Rerun the transaction.SQL Server deadlock grafiğini çoktan kaydetmiştir — system_health genişletilmiş olay oturumu (Extended Events), varsayılan olarak açıktır ve son deadlock'ları ring buffer'da tutar.
▸Grafiği çıkarma
1. En hızlı yol (SSMS): Sunucu → Yönetim → Genişletilmiş Olaylar → system_health → Hedef Verileri Görüntüle. xml_deadlock_report olayını çift tıklayın; grafik görsel olarak açılır.
2. Sorgu ile (otomasyon için):
SELECT CAST(t.target_data AS XML) AS deadlock_xml
FROM sys.dm_xe_session_targets t
JOIN sys.dm_xe_sessions s ON s.address = t.event_session_address
WHERE s.name = 'system_health'
AND t.target_name = 'ring_buffer';▸Grafiği nasıl okuyacaksınız
Grafikte iki (veya daha fazla) işlem ve her birinin beklediği kilit görünür:
- 1Kaynak sırası: İki işlem aynı iki nesneye ters sırada mı erişiyor? (En sık neden)
- 2Kilit türü:
KEY(indeks satırı),PAGE,RANGEveyaOBJECT(tablo) mi?OBJECTgörüyorsanız kilit yükseltmesi (lock escalation) devreye girmiştir (5000+ satır kilidi tablo kilidine dönmüş). - 3Kurban: Geri alınması en ucuz işlem seçilir.
DEADLOCK_PRIORITYile yönetilebilir.
▸Adım adım çözüm
1. Erişim sırasını standartlaştırın. Kod tarafında tablo erişim sırasını sabitleyin (ör. her zaman Musteri → Siparis → SiparisDetay).
2. Eksik indeksleri bulun. Deadlock grafiğinde RANGE kilidi veya geniş tarama görüyorsanız, WHERE sütununda indeks yoktur.
3. Kilit yükseltmesini sınırlayın. Toplu işlemlerde tablo kilidi oluşuyorsa:
ALTER TABLE dbo.Siparis SET (LOCK_ESCALATION = DISABLE);4. Kurbana karar verin. Rapor sorgularının ana akışı ezmesini engellemek için:
SET DEADLOCK_PRIORITY LOW; -- raporlama işleminde5. Sürümleme ile okuma yükünü ayırın. Okuma işlemlerinin yazıcıları kilitlemesini engellemek için RCSI (Read Committed Snapshot Isolation) açın:
ALTER DATABASE uygulama_db SET READ_COMMITTED_SNAPSHOT ON;▸İlgili Mühendislik Rehberleri ve İç Linkler
- •SQL Server Login Failed (Error 18456) Analizi
- •SQL Server Bağlantı Havuzu Timeout
- •Test edilen sürümler: SQL Server 2019 / 2022
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.
SQL Server Msg 9002: Transaction Log Full Hatası Çözümü
9002 hatasında log_reuse_wait_desc çıktısını okumak, LOG_BACKUP / ACTIVE_TRANSACTION / AVAILABILITY_REPLICA nedenlerine göre ayrı çözümler ve VLF yönetimi.