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