Eşzamanlılık ve izolasyon
Deadlock ve optimistic concurrency
Çatışmayı tasarımın parçası kabul et.
Kavramı anlayalım
Deadlock, oturumların birbirinin kaynağını döngü içinde beklemesidir. SQL Server bir victim seçip 1205 hatasıyla transaction’ı geri alır. Tutarlı nesne erişim sırası, kısa transaction ve iyi indeksler riski azaltabilir; tamamen yok edeceği garanti edilmez. Deadlock graph hangi kaynakların ve sorguların döngü oluşturduğunu gösterir.
Retry yalnız idempotent veya güvenle tekrar edilebilir iş mantığıyla, sınırlı deneme ve backoff kullanılarak yapılır. rowversion zaman damgası değil, değişiklik belirtecidir. WHERE Id = @Id AND Version = @OldVersion koşullu UPDATE, kullanıcı düzenleme yaparken değişen kaydı tespit edebilir. Sıfır satır etkilenmesi çatışma veya kaydın bulunmaması olabilir; sessizce başarılı sayma.
Kayıp güncellemeyi ve güvenli tekrar denemeyi yönetmek için.
rowversion’ı tarih gibi göstermek veya sınırsız retry yapmak.
Aynı konu. Üç farklı derinlik.
SELECT ERROR_NUMBER() AS ErrorOutsideCatch;CATCH dışında NULL döner; hata bilgisi kapsamlıdır.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
VersionDemo’daki token’ın veri tipini incele.
Çözümü ve açıklamasını göster
SELECT Id, Version, DATALENGTH(Version) AS TokenBytes FROM #VersionDemo;Önce orta örneği çalıştır. Token sekiz baytlık değişiklik belirtecidir.