Bir röportajda bu soru soruldu ve cevap yoktu. Burada kimse açıklayabilir mi?
Bir röportajda bu soru soruldu ve cevap yoktu. Burada kimse açıklayabilir mi?
Yanıtlar:
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.
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.
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 .
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