SQL Server, bir tablo seçerken kilitlerin aldığı sırayı nasıl belirler?


10

Sistem yük altındayken kilitlenmeyen iki saklı yordam var. Proc A, aynı tabloya eklenirken Proc A bir tablodan seçim yapıyor. Kilit Grafiği, Proc A'nın Proc B'nin IX modu kilidi istediği bir S modu sayfa kilidine sahip olduğunu gösteriyor, Proc A, Proc B'nin zaten IX modu sayfa kilidinin bulunduğu farklı bir sayfa için S modu sayfa kilidini bekliyor .

Açıkça bu her iki sorgu tablodaki sayfaları aynı sırayla kilitleyerek sağlanabilir, ama bunu nasıl yapacağımı anlayamıyorum.

Benim sorum: SQL Server INSERT ve SELECTs yaparken sayfaları kilitlemek için hangi sırayı nasıl belirler ve bu davranışı nasıl değiştirebilirsiniz?

Yanıtlar:


2

SQL Server INSERT'leri ve SELECT'leri yaparken sayfaları hangi sırada kilitleyeceğini nasıl belirler?

Belirlenmemiş - dahili işleme tarafından ve sorgu iyileştirici çıktısına bağlı olarak yapılır.

ve bu davranışı nasıl değiştirebilirsiniz?

İzolasyonunuzu kontrol edin. Yazmak için okursanız, SQL Server'a hemen bir yazma kilidi almasını söyleyin. Nokta kapalı.


1

Şu anda, proc A'nın paylaşılan bir kilidi var.

"Kaynakta paylaşılan (S) kilitler varken başka hiçbir işlem verileri değiştiremez." http://msdn.microsoft.com/en-us/library/aa213039%28v=sql.80%29.aspx

Sql 2005 veya daha üstündeyseniz, anlık görüntü yalıtımı kullanmayı deneyin.

"Anlık görüntü yalıtım düzeyi, işlem düzeyinde okuma tutarlılığı sağlamak için satır sürümü kullanır. Okuma işlemleri sayfa veya satır kilidi almaz; yalnızca SCH-S tablo kilitleri alınır. Başka bir işlem tarafından değiştirilen satırları okurken, satırın sürümünü alır Anlık görüntü yalıtımı veritabanına karşı yalnızca ALLOW_SNAPSHOT_ISOLATION veritabanı seçeneği AÇIK olarak ayarlandığında kullanabilirsiniz. Varsayılan olarak, bu seçenek kullanıcı veritabanları için KAPALI olarak ayarlanmıştır. " http://msdn.microsoft.com/en-us/library/ms189122.aspx

Sadece Sch-S kilitleri alındığından, 'read' yazmanızı engelleyemez.

"Şema kararlılığı (Sch-S) kilitleri, özel (X) kilitler de dahil olmak üzere işlem kilitlerini engellemez." http://msdn.microsoft.com/en-us/library/ms189122.aspx

Anlık Görüntü Yalıtım Düzeyi, tempdb'yi satır sürümleri için yoğun şekilde kullanır, bu nedenle uygun şekilde boyutlandırın ve tempdb disk stratejileri için en iyi uygulamalara bağlı kalın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.