Aracılığıyla paylaş


Kilitlenmeleri en aza indirme

Kilitlenmeler tamamen kaçınılması olamaz, ancak belirli bir kodlama kuralları aşağıdaki oluşturma çıkmaz olasılığını küçültebilirsiniz.Kilitlenmeleri en aza hareketin iş çıkarma yeteneğini artırmak ve daha az hareketler için sistem yükünü azaltın:

  • Geri, işlem tarafından gerçekleştirilen tüm işleri geri alındı.

  • Çünkü geri deadlocked, toplu uygulamalar tarafından tekrar.

Kilitlenme olasılığını en aza indirmek için:

  • Erişim nesneler aynı sırada.

  • Kullanıcı etkileşimi işlemlerde kaçının.

  • Kısa ve bir toplu iş işlemlerini saklamak.

  • Yalıtım düzey kullanın.

  • Bir satır sürümü göre yalıtım düzey kullanın.

    • Satır sürümü kullanmak için etkin okuma kaydedilmiş hareketler için ON READ_COMMITTED_SNAPSHOT veritabanı seçeneğini ayarlayın.

    • Anlık görüntü yalıtım kullanın.

  • Bağlı bağlantılar kullanır.

Aynı sipariş erişim nesneler

Tüm eş zamanlı hareketlerin nesneler aynı sırada erişiyorsanız, kilitlenme ortaya olasılığı daha düşüktür.Örneğin, iki eşzamanlı işlemler üzerinde kilit almak,Tedarikçi tabloyu ve sonra bölümü masasında diğer işlem tamamlanana kadar tedarikçi tablo üzerinde bir işlem engellendi. İlk hareketi tamamlar veya geri alır sonra ikinci devam eder ve bir çıkmaz oluşmaz.Tüm veri değişiklikleri için saklı yordamları kullanmak, nesnelere erişim sırasını standartlaştırmak.

Diagram showing deadlock avoidance

İşlem, kullanıcı etkileşimi kaçının

Toplu işlemi kullanıcı müdahalesi olmadan çalışan hızına, kullanıcı el ile bir uygulama tarafından istenen bir parametre için bir komut istemi için yanıtlama gibi sorguları yanıtlamak gerekir hızından daha hızlı olduğundan, kullanıcı etkileşimi içeren hareketler yazma kaçının.Örneğin, bir hareket bekleme kullanıcı girdisi ve kullanıcı için Öğle yemeği için geçip geçmeyeceğini veya bile Giriş için hafta, işlemin tamamlanmasını kullanıcı geciktirir.Bu, yalnızca işlem kabul edilen veya geri hareket tarafından tutulan tüm kilitlerin serbest olduğundan sistem akışındaki düşer.Bir çıkmaz durumu ortaya bile, hareket için beklerken diğer hareketleri aynı kaynaklara erişmesi engellenir.

Kısa ve toplu iş iş iş Koru

Aynı veritabanında birden çok uzun süren işlemler aynı anda çalıştırdığınızda, genellikle bir çıkmaz oluşur.Uzun işlem uzun özel ya da güncelleştirme kilitler, diğer etkinliklerin engelleme ve olası çıkmaz durumlar için önde gelen tutulur.

İşlemin tamamlanmasını ve kilitleri serbest bırakma olası gecikmeleri azaltmak, bir işlem sırasında ağ gidiş-dönüş işlemleri tek toplu iş iş tutmak en aza indirir.

Bir alt yalıtım düzey kullan

İşlem sırasında bir alt çalışmayacağını belirlemenize yalıtım düzey.Kaydedilen Okuma uygulama verilerini okumak bir hareket sağlar (değiştirilemez) önceden okuma ilk hareketin tamamlanması için bekleme olmadan başka bir işlem.Kaydedilen okuma gibi daha düşük bir yalıtım düzey kullanarak tutan paylaşılan kilitler kısa bir süre daha yüksek yalıtım düzey gibi seri hale getirilebilir.Bu, kilitleme çakışması azaltır.

Bir satır güncelleştirme tabanlı yalıtım düzey kullan

READ_COMMITTED_SNAPSHOT veritabanı seçeneğini küme açık olduğunda, okuma kabul edilen yalıtım düzeyi altında çalışan bir işlem paylaşılan kilitler yerine satır sürümü okuma işlemleri sırasında kullanır.

Not

Bazı uygulamalar, kilitleme ve engelleme okuma kabul edilen yalıtım davranışını temel kullanır.Bu uygulamalar için bu seçeneğin etkinleştirilmiş önce bazı değişiklik gerekiyor.

Anlık görüntü yalıtım paylaşılan kilitler okuma işlemleri sırasında kullanabileceğiniz satır sürümü de kullanır.Bir hareket altında anlık yalıtım çalıştırmadan önce ALLOW_anlık görüntü_ISOLATION veritabanı seçeneğini küme açık olması gerekir.

Bu yalıtım düzeyleri ortaya arasında okuma ve yazma işlemleri kilitlenmeleri en aza indirmek için kullanır.

İlişkili bağlantıları

İlişkili bağlantılarını kullanarak aynı uygulama tarafından açılmış iki veya daha fazla bağlantı birbirleri ile işbirliği.Birincil bağlantı ve tersi elde gibi ikincil bağlantılar tarafından alınan tüm kilitler tutulur.Bu nedenle, her engellemeyin.