Kilit yükseltme (veritabanı altyapısı)
Kilit etkinleşmesini birçok ince Gren kilitleri eşzamanlılık çekişme olasılığını artırırken sistem yükünü azaltmak, daha az Gren kaba kilitleri dönüştürme işlemidir.
Olarak SQL Server Veritabanı Altyapısı alt düzey kilitleri güncelleştirdiğini, alt düzey nesneleri içeren nesnelerde de hedefi kilit yerleştirir:
Satır veya dizin anahtar aralığı kilitleme, Veritabanı Altyapısı koyar bir amaçlı kilit satırlar veya anahtarlar. içeren sayfalara
Sayfa kilitleme tuşlarına basıldığında Veritabanı Altyapısı üzerinde daha yüksek bir amaçlı kilit koyar düzey sayfaları içeren nesneleriEk olarak amaçlı kilit nesnesinde aşağıdaki nesneler üzerinde hedefi sayfa kilitlemeleri istenir:
Kümelenmemiş dizinleri yaprak düzey sayfalar
Veri sayfaları kümelenmiş dizinleri
Yığın veri sayfaları
The Veritabanı Altyapısı might do both row and page locking for the same statement to minimize the number of locks and reduce the likelihood that lock escalation will be necessary.Örneğin, Veritabanı Altyapısı sayfa kilitlemeleri üzerinde kümelenmemiş dizin (dizin düğümü bitişik yeterli anahtarlarında sorgu karşılamak için seçili değilse) de yerleþtirebilirsiniz ve satır kilitleri veri.
Kilitler, görüşmek istiyor Veritabanı Altyapısı hedefi kilit değiştirmeye çalışır tablo ilgili tam kilit, örneğin, bir özel (x) kilidi kilitlemek hedefi bir özel (IX) değiştirme veya bir amacını (Is) kilit paylaşılan (s) kilit paylaşılan).Kilit yükseltme girişimi başarılı ve tam tablo kilidi alınan, sonra tüm yığın veya B-ağacı, sayfa (sayfa) veya yığın veya dizin işlem tarafından tutulan satır düzey (RID) kilitleri serbest bırakılır.Tam kilit alınamıyor, hiçbir kilit yükseltme yapılır saat ve Veritabanı Altyapısı satır, anahtar ya da almaya devam edeceksayfa kilitleri.
The Veritabanı Altyapısı does not escalate row or key-range locks to page locks, but escalates them directly to table locks.Benzer şekilde, sayfa kilitlemeleri tablo kilitleri için her zaman aktarılana.De SQL Server 2008, yöneticinize bölümlenmiş tabloları kilitleme iletin HoBT düzey çok yerine ilişkili bölüm için tablo kilidi.HoBT düzey kilit hizalanmış HoBTs bölümü için mutlaka kilitleyin.
Not
HoBT düzey kilitleri genellikle eşzamanlılık artırır, ancak her farklı bölümleri kilitleme işlemleri diğer bölümler için kendi özel kilit genişletmek istediğinizde kilitlenme olasılığını tanıtmak.Ender durumlarda, tablo kilitleme taneciklik daha iyi gerçekleştirebilir.
Eşzamanlı işlemler tarafından tutulan çakışan kilitleri nedeniyle kilit yükseltme girişimi başarısız olursa Veritabanı Altyapısı deneme kilit etkinleşmesini için her ek 1,250 kilitleri alınmış olarak hareket.
Her is olay derecede çalışır düzey , tek bir Transact-SQL deyim.Olay başladığında, Veritabanı Altyapısı , başvurulan etkin deyim tarafından tablolardan herhangi birini geçerli hareket tarafından sahip olunan tüm kilitleri yöneticinize iletin girişimleri sağlanan onu karşılayan is eşik gereksinimleri.deyim tablo eriştiğini önce yükseltme olay başlarsa, bu tablo üzerinde kilitleri yöneticinize iletin için girişimde bulunulmaz.Kilitleri kilit yükseltme başarılı olursa, bir önceki deyim içinde hareket tarafından alınan ve hala en tutulan saat tablo geçerli deyim tarafından başvurulan ve is olay dahil, olay başlar aktarılana.
Örneğin, oturum bu işlemleri gerçekleştirir varsayılmaktadır:
Bir işlem başlar.
Güncelleştirmeleri TableA.Bu özel satır kilitler oluşturur TableA , hareket tamamlanıncaya kadar tutulur.
Güncelleştirmeleri TableB.Bu özel satır kilitler oluşturur TableB , hareket tamamlanıncaya kadar tutulur.
Birleştiren bir seçim yapar TableA ile TableC.Sorgu yürütme planı alınacağı satırlarla çağıran TableA gelen satırları almadan önce TableC.
deyim Tetikleyiciler kilit yükseltme alınan satırların alıyor iken TableA ve onu eriştiğini önce TableC.
kilit yükseltme başarılı olursa, yalnızca kilitler tutulan oturum üzerinde TableA aktarılana.Bu, deyim tarafından paylaşılan kilitleri hem önceki güncelleştirme deyimini gelen özel kilit içerir.İçinde oturum sırasında yalnızca kilitleri alınan TableA için yükseltme başarılı olduğunda kilit yükseltme, yapılması gerektiğini, belirlemek için deyim sayılan tüm kilitleri oturumda tarafından tutulan TableA tablo üzerinde özel kullanım kilidi aktarılanave hedefi kilitleri dahil tüm diğer alt-taneciklik kilitleri, TableA serbest bırakılır.
Üzerinde kilitleri yöneticinize iletin bir girişimi TableB hiçbir etkin başvuru olduğundan TableB deyim içinde.Benzer şekilde üzerinde kilitleri yöneticinize iletin girişimi TableC, hangi değil aktarılana is oluştuğunda bunu henüz erişilen değil çünkü.
Kilit yükseltme eşikleri
kilit yükseltme kilit yükseltme tablo üzerinde alter tablo AYARLAMAK LOCK_ESCALATION seçeneğini kullanarak değil bırakıldığında ve aşağıdaki koşullardan biri olduğunda tetiklenir:
Tek bir Transact-SQL deyim isteklerdir en az 5.000 kilitleri tek nonpartitioned tablo veya dizin.
Tek bir Transact-SQL deyim tek bir bölüme bölümlenmiş bir tablo ve alter table en az 5.000 kilitleri güncelleştirdiğini küme LOCK_ESCALATION seçenek küme auto. için
İçinde kilit sayısı bir örnek , Veritabanı Altyapısı aşıyor bellek veya yapılandırma eşikleri.
Kilitleri kilit çakışması nedeniyle aktarılana olamaz, Veritabanı Altyapısı düzenli olarak harekete kilit yükseltme sırasında alınan her yeni 1,250 kilitleri.
Transact-sql deyimi için yükseltme eşiği
Kilit yükseltme ne zaman harekete bir Transact-SQL deyim bir tablo veya dizin, tek bir başvuru üzerinde en az 5.000 kilitleri güncelleştirdiğini veya tablo bölümlere ayrılmışsa, tek bir başvuru bir tablo bölüm veya dizin bölümü.Bir deyim bir dizin 3.000 kilitler ve aynı başka bir dizin içinde 3.000 kilitleri güncelleştirdiğini, örneğin, kilit yükseltme tetiklenir değil tablo.Benzer şekilde, kilit yükseltme bir kendi kendine birleştirmek bir tablodaki bir deyim varsa ve her tablo başvurusu yalnızca tablodaki 3.000 kilitleri güncelleştirdiğini tetiklenmez.
Kilit etkinleşmesini yalnızca oluşur sırasında erişilen tablolarda saat is tetiklenir.Tek bir deyim bu dizideki üç tablo erişen bir birleştirmek olduğunu varsayalım: TableA, TableB, ve TableC.deyim içinde 3.000 satır kilitleri güncelleştirdiğini kümelenmiş dizin için TableA ve en az 5000 satır kilitler kümelenmiş dizin için TableB, ancak henüz eriştiğini TableC.Zaman Veritabanı Altyapısı algılar, deyim alınan en az 5000 satır kilitler TableB, geçerli işlem tarafından tutulan tüm kilitleri yöneticinize iletin dener TableB.Bu da Cari işlem tarafından tutulan tüm kilitleri yöneticinize iletin dener TableA, ancak bu yana üzerinde kilit sayısı TableA olan < 5000, yükseltme başarısız olur.Hiçbir kilit yükseltme için çalıştı TableC is oluştuğunda bunu henüz erişilen değil çünkü.
Veritabanı Altyapısı örneği için yükseltme eşiği
Kilit sayısı kilit etkinleşmesini için bellek eşik değerinden büyük olduğunda Veritabanı Altyapısı Tetikleyicileri kilit yükseltme.Bellek eşik, ayarına bağlıdır Kilit yapılandırma seçeneği:
If the locks option is set to its default setting of 0, then the lock escalation threshold is reached when the memory used by lock objects is 24 percent of the memory used by the Veritabanı Altyapısı, excluding AWE memory.Kilit temsil etmek için kullanılan veri yaklaşık olarak 100 bayt uzunluğunda yapısıdır.Bu eşik dinamik olduğundan Veritabanı Altyapısı dinamik olarak güncelleştirdiğini ve değişen iş yükleri için ayarlamak için bellek serbest bırakmalar
If the locks option is a value other than 0, then the lock escalation threshold is 40 percent (or less if there is a memory pressure) of the value of the locks option.
The Veritabanı Altyapısı can choose any active statement from any session for escalation, and for every 1,250 new locks it will choose statements for escalation as long as the lock memory used in the instance remains above the threshold.
Etkinleºmesini karışık kilit türleri
Yığın veya dizin için seçili kilit, kilit yükseltme oluştuğunda en kısıtlayıcı alt düzey kilit gereksinimlerini karşılamak için güçlü.
Örneğin, oturum varsayılmaktadır:
Bir işlem başlar.
kümelenmiş dizin içeren tablo güncelleştirir.
Aynı başvuran bir deyim sorunları tablo.
update deyim bu kilitleri güncelleştirdiğini:
Özel (x) güncelleştirilmiş veri satırları kilitler.
Hedefi özel (IX) satırları içeren bir kümelenmiş dizin sayfaları kilitler.
Kümelenmiş dizin ve tablo üzerinde başka bir IX kilit.
deyim bu kilitleri güncelleştirdiğini:
Satır zaten bir update deyim dan x kilit tarafından korumalı değilse onu okur, tüm veri satırları kilitler (s) paylaşılan.
Hedefi paylaşım kilitleri sayfa zaten bir IX kilit tarafından korumalı değilse, satırları içeren tüm kümelenmiş dizin sayfalarda.
Hayır kilit üzerinde kümelenmiş dizin veya tablo IX tarafından korunan zaten çünkü kilits.
deyim kilit yükseltme tetiklemek için yeterli kilitleri güncelleştirdiğini ve yükseltme başarılı, IX kilit tablo üzerinde bir x kilidi dönüştürülür ve tüm satır, sayfa ve dizin kilitlerine serbest.Güncelleştirmeleri ve okuma tablo üzerinde x kilit tarafından korunur.
Azalan kilitleme ve yükseltme
Çoğu durumda, Veritabanı Altyapısı ile varsayılan ayarlarını kilitlemek için çalışırken en iyi performansı sunar ve kilit yükseltme.Yoksa bir örnek , Veritabanı Altyapısı çok sayıda kilit üretir ve sık sık Kilitle escalations tarafından kilitleme miktarını azaltmayı deneyin, görme:
Okuma işlemleri için paylaşılan kilitleri üreten bir yalıtım düzey kullanarak.
READ_COMMITTED_SNAPSHOT veritabanı, seçenek okuma kaydedilmiş yalıtım düzey açık'tır.
Anlık görüntü yalıtım düzey.
read UNCOMMITTED yalıtım düzey.Bu sadece kirli okuma ile çalışabilen sistemler için kullanılabilir.
Not
Değiştirme yalıtım düzey 'ın örneğindeki tüm tabloları etkileyen Veritabanı Altyapısı.
paglock veya tablock kullanarak tablo ipuçları için Veritabanı Altyapısı kullanmak sayfa, yığın veya dizin kilitlerine, yerine satır kilitleri.Bu seçeneği kullanarak ancak engelleme aynı veri erişim girişiminde bulunan kullanıcıların diğer kullanıcıların sorunlarını artırır ve birkaç eşzamanlı kullanıcı sistemlerinde kullanılmaması.
Bölümlenmiş tablolar için LOCK_ESCALATION seçeneğini kullanın alter tablekilit yükseltme devre dışı veya tablo yerine HoBT düzey kilitleri yöneticinize iletin.
1211 Ve 1224 izleme bayrakları, tüm veya bazı kilit escalations devre dışı bırakmak için de kullanabilirsiniz.Daha fazla bilgi için bkz: İzleme Bayrakları (Transact-SQL).Kullanarak da, monitör kilit yükseltme SQL Server Profiler Kilit: yükseltme olay; ve bakın sql Server Profiler'I kullanma.
Ayrıca bkz.