Kilit yükseltme nedir?


47

Bir röportajda bu soru soruldu ve cevap yoktu. Burada kimse açıklayabilir mi?

Yanıtlar:


45

DB kilitleri satırlarda, sayfalarda veya tüm tablolarda veya indekslerde bulunabilir. Bir işlem devam ederken, işlem tarafından tutulan kilitler kaynakları alır. Kilit yükseltme, sistemin çok sayıda iyi ayarlanmış kilit tarafından alınan kaynakları kurtarmak için birden fazla kilidi daha yüksek bir seviyeye birleştirir (örneğin, bir sayfaya birden çok satır kilidini veya bir tablodaki birden çok sayfayı birleştirmek).

Bunu otomatik olarak gerçekleştirecektir, ancak belirli bir masada kilit yükseltme politikasını kontrol etmek için tablolara bayraklar koyabilirsiniz (kitaptaki ALTER TABLE'a bakınız). Özellikle, erken veya aşırı istekli kilit yükseltme, aynı anda aynı sayfaya ayrı satırlar yazarken iki işleminiz olduğunda Sybase ve SQL Server'ın eski sürümlerinde bir sorun olarak kullanılıyordu. Yeterince geriye giderseniz (IIRC SQL Server 6.5) SQL Server aslında satır kilitlemesine sahip değil, yalnızca tabloları veya sayfaları kilitleyebilirdi. Bunun gerçekleştiği yerde, aynı sayfadaki kayıtların ekleri arasında bir çekişme yaşanabilir; sık sık masaya kümelenmiş bir dizin eklersiniz, böylece yeni ekler farklı sayfalara giderdi.


3
Ayrıca, sunucunun ne zaman tırmandığı üzerinde hiçbir kontrolümüz olmadığına da dikkat edilmelidir.

Şimdi yapıyoruz. Bu T1211'i çağırıyor.
Joshua,

@Joshua, 1211 izleme bayrağı kilit yükseltme işlemini devre dışı bırakmak için kullanılır. SQL Server'a belirli bir zamanda yükselmesini söylememizin bir yolu yok.
sadece bir öğrenci,

10
Satır kilitleri Sayfa Kilitlerine değil, doğrudan Tablo kilitlerine yükseltilir.
Manoj Pandey

Manoj'ın söylediği doğru. Daha az deneyimli SQL Server kullanıcılarının yanlış yönlendirilmesinden kaçınmak için cevabınızdaki kısmı düzeltmelisiniz
NikolaD

20

Birçok ince taneli kilidi daha az kaba taneli olana dönüştürerek sistemin genel giderlerini azaltmanın bir yöntemidir. Daha detaylı bilgi burada ve burada bulunabilir .

Örneğin, bir tablodaki belirli satırlarda çok sayıda (genellikle yüzlerce veya daha fazla) kilit varsa, izin verilen maksimum kilit sayısını aştığınızda, bunlar tüm tablodaki bir kilitle değiştirilebilir.


11

SQL Server, birkaç ince taneli düşük seviye kilidini kaba taneli yüksek düzey kilitlere dönüştürerek, bellek yükünü azaltmak için Escalation Kilitleme işlemini yapar .

  • Satır Kilitleri her zaman Tablo Kilitlerine yükseltilir ve
  • Sayfa Kilitleri ayrıca Tablo Kilitlerine yükseltilir.

Row kilitlerinin Sayfa kilitlerine yükseltildiği bir efsanedir, yukarıda @ConcernedOfTunbridgeWells tarafından da belirtilmiştir.

Çok az satır güncellemesine sahip bir tablo varsa, SQL motoru bu satırlarda Row-Locks veya bu Sayfalarda Page-Lock almaya çalışır. Diyelim ki Row-Lock'u almış. Ancak, satır güncellemeleri eşiği (~ 5k kilitleri) artırırsa, birkaç Row-Locks almak yerine, tek bir Masa Kilidi alır. Böylece, birkaç Row-Lock serbest bırakarak ve tek bir Table-Lock alarak hafıza yükünü azaltır, ancak eşzamanlılığı arttırır. Aynı Sayfa kilidi ile olur.

Kilit yükseltme eşiği , Kilit Tırmanma detaylı açıklama MSDN Bol burada sözü edilmiş en-az 5000 kilitler ve birçok faktöre bağlıdır: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx


5

Kilit yükseltme, bir kilidin daha kısıtlayıcı bir moda dönüştürülmesi anlamına gelir. Bu en sık veritabanlarında görülür. Bir sorgu "paylaşılan" için kilitli bir kaynağa sahip olabilir ve güncelleme yapmak için onu "özel" değerine yükseltebilir.

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.