Varsayılan olarak, bu düzeltmeyi içeren SQL Server 2014 için Service Pack 1 ve Service Pack 3 için SQL Server 2012 ve düzeltmeyi etkinleştirmek için herhangi bir izleme bayrağı eklemek zorunda değilsiniz. Çözüm bölümünde toplu güncelleştirmelerden birini yükledikten sonra bu düzeltmeyi etkinleştirmek için Microsoft SQL Server için başlangıç parametreleri izleme bayrağı 1236 ekleyerek başlatmanız gerekmektedir.
Belirtiler
Çok sayıda işlemci içeren bir bilgisayarda Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 veya SQL Server 2008 R2'in bir örneğini çalıştırmak varsayalım. Zaman kilit sayısı (kaynak türü = veritabanı) belirli bir veritabanında belirli bir eşiğe aşıyor için aşağıdaki performans sorunlarla karşılaşırsınız:
-
LOCK_HASH sayaç kilidi sayısı için yükseltilmiş değerleri oluşur.
Not: Bu sayaç kilidi izleme hakkında bilgi için "Ek bilgi" bölümüne bakın. -
Sorgular veya veritabanı kilitleri gerektiren işlemleri tamamlanması uzun sürebilir. Örneğin, aşağıdaki performans gecikmeler görebilirsiniz:
-
SQL Server oturumları
-
Bağlantılı sunucu sorgular
-
sp_reset_connection
-
Hareketleri
-
Not: Kilitleri listesini bulmak için (kaynak türü = veritabanı) belirli bir veritabanı üzerinde "Ek bilgi" bölümüne bakın. Eşik değeri ortama göre değişir.
Çözüm
Toplu güncelleştirme bilgileri
Sorun ilk olarak SQL Server aşağıdaki toplu güncelleştirmede giderilmiştir.
SQL Server 2008 R2 SP2 için toplu güncelleştirme 13/en-us/help/2967540
SQL Server 2008 SP3 toplu güncelleştirmesi 17/en-us/help/2958696
SQL Server 2014 için Toplu Güncelleştirme 1/en-us/help/2931693
SQL Server 2012 SP1 için Toplu Güncelleştirme 9/en-us/help/2931078
Her yeni bir toplu güncelleştirme SQL Server için tüm düzeltmeleri içerir ve tüm güvenlik, düzeltmelerini önceki toplu güncelleştirme ile birlikte. SQL Server için en son toplu güncelleştirme denetleyin:
Düzeltme bilgileri
Microsoft, desteklenen bir düzeltmeyi kullanıma sunmuştur. Ancak bu düzeltme yalnızca bu makalede anlatılan sorunu düzeltmek amacıyla hazırlanmıştır. Bu düzeltmeyi yalnızca bu sorunla karşılaşmış olan sistemlere uygulayın. İndirilebilir bir düzeltme varsa, bu Bilgi Bankası makalesinin üst kısmında "İndirilebilir Düzeltme Kullanılabilir" bölümü bulunur. Bu bölüm görünmüyorsa, düzeltmeyi edinmek üzere Microsoft Müşteri Hizmetleri ve Destek bölümüne bir istek gönderin. Not: Ek sorunlar oluşursa veya sorun giderme gerekiyorsa, ayrı bir hizmet isteği oluşturmanız gerekebilir. Ek destek sorularına ve bu düzeltme için geçerli olmayan sorunlara normal destek ücretleri uygulanır. Tam listesi Microsoft Müşteri Hizmetleri ve destek telefon numaralarını veya ayrı bir hizmet isteği oluşturmak için aşağıdaki Microsoft Web sitesini ziyaret edin:http://support.microsoft.com/contactus/?ws=supportNot: "Düzeltme karşıdan kullanılabilir" formunda düzeltmenin kullanılabilir olduğu diller görüntülenir. Kendi dilinizi görmüyorsanız, bu dil için bir düzeltme mevcut değil demektir.
Durum
Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Daha fazla bilgi
Bir uygulama SQL Server'a bir bağlantı yaptığında, önce bir veritabanı bağlamı kurar. Varsayılan olarak, bağlantı SH modunda veritabanı kilit edinmeye çalışır. SH-veritabanı kilit bağlantı durduruldu veya veritabanı içeriği bağlantı kullanım süresi boyunca değiştirilir yayımlanacaktır. Aynı veritabanı içeriği kullanan birçok etkin bağlantılar varsa, o belirli bir veritabanı için veritabanı kaynak türünün birçok kilitleri olabilir.
16 veya daha çok CPU olan bilgisayarda bölümlenmiş kilit düzen yalnızca tablo nesneleri kullanın. Ancak, veritabanı kilitleri bölümlendirilir değil. Bu nedenle, veritabanı sayısı o kadar büyük kilitler, SQL Server veritabanı üzerinde bir kilit elde etmek için daha uzun sürer. Çoğu uygulamalar bu tasarım tarafından neden olduğu sorunları yaşamazsınız. Ancak belirli bir eşiğe aşıyor tamamlanmaz, ek çalışma ve zaman gerekli kilit elde edilir. Maliyet sadece mikro saniye her ek kilit olsa da, toplam süre kilit karma demetleri bir sayaç kilidi kullanılarak korunan çünkü hızla artabilir. Bu ek CPU döngülerini neden olur ve kilit elde etmek ek çalışanları için bekler. Bu düzeltme, başlatma sırasında izleme bayrağı T1236 etkin olduğunda veritabanı kilit bölümleme tanıtır. Veritabanı kilit bölümleme kilit listesinin derinlik yerel her bölüm içinde yönetilebilirliğini korur. Bu veritabanı kilit elde etmek için kullanılan erişim yolu önemli ölçüde iyileştirir. LOCK_HASH sayaç kilidi izlemek için aşağıdaki sorguyu kullanabilirsiniz.SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint, [spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int) DECLARE @counter int = 1 WHILE @counter < 100 BEGIN INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH' WAITFOR DELAY '00:00:05' SET @counter +=1 END SELECT * FROM #spinlock_stats ORDER BY [CaptureTime] DROP TABLE #spinlock_stats Sayaç kilidi çekişmesi SQL Server'da tanılamada ve hakkında daha fazla bilgi için aşağıdaki belgeye bakın:Tanılamada ve SQL Server'da sayaç Kilidi çakışmasıNot: Bu belge SQL Server 2008 R2 için yazılmış olsa da, bilgi için SQL Server 2012 hala geçerlidir.
Başvurular
SQL Server 2012'de izleme bayraklar hakkında daha fazla bilgi için aşağıdaki TechNet Web sitesine gidin:
SQL Server 2012'de izleme bayraklar hakkında bilgi Kullanıcı her bir veritabanı, veritabanı kilit sayısı bulma hakkında daha fazla bilgi için bu değeri hesaplamak için aşağıdaki sorgu kullanın:select Resource_database_id, resource_type, request_mode, request_status, count (*) 'LockCount' from sys.dm_tran_locks group by Resource_database_id, resource_type, request_mode, request_status