Sign in with Microsoft
New to Microsoft? Create an account.

Özet

Kilit etkinleşmesini tablo kilitler (örneğin, satır veya sayfa kilitleri) çok hassas kilitleri dönüştürme işlemidir. Microsoft SQL Server kilit etkinleşmesini gerçekleştirmek ne zaman dinamik olarak belirler. Bu karar verirken, SQL Server tüm hareket ve kilitleri için sisteme bir bütün olarak kullanılan bellek tarafından tutulan kilit sayısı belirli bir tarama tutulan kilitlerin sayısını dikkate alır. Genellikle, SQL Server'ın varsayılan davranışı burada performansını artırmak ya da ne zaman aşırı sistem kilidi bellek daha makul bir düzeye azaltmalısınız bu noktalarda gerçekleşen kilit etkinleşmesini sonuçlanır. Ancak, bazı uygulama veya sorgu tasarımları kilit etkinleşmesini zaman arzu edilmez ve ilerletildi tablo kilidi diğer kullanıcıları engelleyebilir, bir seferde tetikleyebilir. Bu makalede nasıl belirleneceği anlatılmaktadır kilit etkinleşmesini engelleme ve istenmeyen kilit etkinleşmesini ile başa çıkma neden oluyor.

Daha fazla bilgi

Kilit etkinleşmesini engelleme neden olup olmadığını belirleme

Kilit etkinleşmesini çoğu engelleme sorunları neden olmaz. Kilit etkinleşmesini engelleme sorunlarını karşılaştığınız zaman zaman oluşan olup olmadığını belirlemek için Kilit: yükseltme olay içeren bir SQL Profiler izleme başlatın. Kilit: yükseltme olay görmüyorsanız, kilit etkinleşmesini sunucunuzda oluşmasını değil ve bu makaledeki bilgiler, durumunuz için geçerli değildir.

Kilit etkinleşmesini yapılıyorsa, ilerletildi tablo kilidi diğer kullanıcıları engelleyen olduğunu doğrulayın.

Kafa Engelleyicisi tanımlamak ve diğer sunucu işlem kimliği (SPID) engelleme kafa Engelleyicisi tarafından tutulan kilit kaynak belirleme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:

224453 anlama ve SQL Server 7.0 veya 2000 engelleme sorunlarını giderme

Kilit etkinleşmesini diğer kullanıcıları engelleyen bir kilit SEKMESİ (tablo düzeyi) kilit s (paylaşılan) veya (özel) X bir kilit modu dışında ise, sorun değil. Sekme kilit bir hedefi kilit (örneğin, Is, IU veya IX kilit modu) ise, özellikle, bu kilit etkinleşmesini sonucu değil. Engelleme sorunlarınızı tarafından kilit etkinleşmesini neden olduğunu değil, sorun giderme adımları için Q224453 makalesine bakın.

Kilit etkinleşmesini engelleme

Hareketleri kısa tutmak ve böylece değil kilit yükseltme eşikleri aşıldığında pahalı sorguların kilit Ayak izi azaltmak için kilit etkinleşmesini engellemenin en basit ve en güvenli yolu değil. Birçok listelenen bu hedefin elde etmek için çeşitli yollar vardır:

  • Büyük toplu işlemleri birkaç küçük işlemlere bölmeniz. Örneğin, aşağıdaki sorgu bir denetim tablosundan birkaç yüz bin eski kayıtları kaldırmak için çalıştı ve sonra diğer kullanıcılar engellenen bir kilit etkinleşmesini neden olduğu bulundu varsayalım:

    DELETE FROM LogMessages WHERE LogDate < '2/1/2002'

    Bir kerede birkaç yüz bu kayıtları kaldırarak, hareket başına biriken ve kilit etkinleşmesini önlemek kilitlerin sayısını önemli ölçüde azaltabilirsiniz. Örneğin:

    SET ROWCOUNT 500delete_more:
    DELETE FROM LogMessages WHERE LogDate < '2/1/2002'
    IF @@ROWCOUNT > 0 GOTO delete_more
    SET ROWCOUNT 0
  • Sorgunun olabildiğince verimli hale getirerek sorgunun kilit Ayak izi azaltmak. Büyük taramaları veya yer işareti aramaları çok sayıda kilit etkinleşmesini olasılığını artırabilir; Ayrıca, bu kilitlenmeleri olasılığını artırır ve genellikle eşzamanlılık ve performansı olumsuz yönde etkiler. Sorgu bulduktan sonra kilit etkinleşmesini neden olur, aradığı yeni dizinler oluşturma veya varolan bir dizini dizin veya tablo taramaları kaldırmak ve dizin verimliliğini en üst düzeye çıkarmak için sütunları eklemek için fırsatlar arayın. Otomatik dizin çözümleme işlemini gerçekleştirmek için bir Query Analyzer sorgu penceresine yapıştırarak sorgu göz önünde bulundurun. Sorgu menüsünde bunu yapmak için SQL Server 2000'de Dizin Ayarlama Sihirbazı ' nı tıklatın veya Dizin çözümlemesi gerçekleştir SQL Server 7. 0'yi tıklatın.

    Bu en iyileştirme bir hedeftir dizini yapmak için aradığı yer işareti (en üst düzeye meydana belirli bir sorgu için dizin) aramaları maliyetini en aza indirmek için mümkün olduğunca olabildiğince az sayıda satır döndürür. Bir yer işareti arama mantıksal işleç birçok satır döndürebilir SQL Server tahminleri, yer işareti arama gerçekleştirmek için bir hazırlık kullanabilir. SQL Server için bir yer işareti arama hazırlık kullanırsanız, sorgu için bir sorgu bölümü için yinelenebilir okuma bir kısmının hareket yalıtım düzeyine arttırmalısınız. Bu ne okuma kabul edilen yalıtım düzeyinde bir SELECT deyimi benzer görünebilir binlerce kilit yükseltme eşikleri aşmak sorgu neden olabilir (üzerinde kümelenmiş dizin hem kümelenmemiş bir dizin), anahtar kilit elde anlamına gelir. Ancak, varsayılan okuma kabul edilen yalıtım düzeyinde sık görülmez, paylaşılan tablo kilidi escalated kilidi olduğunu fark ederseniz bu özellikle önemlidir. Yükseltme ile yer işareti arama hazırlık yan tümcesi neden oluyorsa, ek sütunlar dizin arama veya dizin tarama mantıksal işleci aşağıda yer işareti arama mantıksal işleç sorgu planında yer kümelenmemiş bir dizin eklemeyi düşünün. Pratik select sütun listesinden her şey dahil ederseniz birleştirme ölçüt veya WHERE yan tümcesinde kullanılan sütunları kapsayan en az bir dizin veya bir kapak dizin (sorguda kullanılan bir tablodaki tüm sütunları içeren bir dizin) oluşturmak mümkün olabilir.

    Bir iç içe döngülü birleştirme hazırlık de kullanabilir ve bu aynı kilitleme davranışı neden olur.

    Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

    260652 kullanan bir "yer işareti arama... iç içe döngülü birleştirme Hazırlık ile"kilitleri uzun basılı tutun

  • Farklı bir SPID şu anda uyumsuz tablo Kilit tutan, kilit etkinleşmesini gerçekleşemez. Her zaman kilit etkinleşmesini tablo kilidi ve hiçbir zaman sayfa kilitlemeleri iletir. Bunun nedeni, başka bir SPID uyumsuz bir sekme kilit kilit yükseltme girişimi başarısız olursa, ayrıca, yükseltme çalıştı sorgu için bir sekme kilidi beklerken engellemez. Bunun yerine, (satır, anahtar veya sayfa) kendi özgün, daha belirgin düzeyde kilit almaya devam eder, düzenli olarak ek yükseltme yapmayı dener. Bu nedenle, belirli bir tablo üzerindeki kilit etkinleşmesini önlemek için bir almaya ve ilerletildi kilit türüyle uyumlu değil farklı bir bağlantı bir kilit tutmak için bir yöntemdir. Bir tablo düzeyinde (hedefi özel) IX kilit herhangi bir satır veya sayfa kilitlemez ancak escalated S (paylaşılan) veya (özel) sekmesini kilit X hala uyumlu olacaktır. Örneğin, çok sayıda mytable tablodaki satırlar değiştiren toplu iş çalıştırın varsayalım ve kilit etkinleşmesini nedeniyle oluşan engelleme açtı. Bu işi her zaman az bir saatte tamamlarsa, aşağıdaki kodu içeren bir Transact-SQL iş oluşturmak ve birkaç dakika önce toplu işin başlangıç saati başlatmak için yeni iş zamanlama:

    BEGIN TRANSELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0
    WAITFOR DELAY '1:00:00'
    COMMIT TRAN

    Bu sorgu alır ve bu sırada masadaki kilit etkinleşmesini önleyen bir saat için üzerinde mytable IX kilit tutar. Bu toplu herhangi bir veriyi değiştirmez veya (diğer sorgu tablo kilit ile TABLOCK ipucu zorlar veya yönetici satır veya sayfa kilitleri bir sp_indexoption kullanarak devre dışı bırakmış, saklı yordam sürece) diğer sorguları engelleyecek.

Buna ek olarak, kilit etkinleşmesini izleme bayrağı 1211 etkinleştirerek devre dışı bırakabilirsiniz. Ancak, bu izleme bayrağı genel olarak SQL Server örneğindeki tüm kilit etkinleşmesini devre dışı bırakır. SQL Server'da kilit etkinleşmesini Aksi halde alınıyor ve birkaç binlerce kilitleri serbest bırakma yükünü göre yavaş sorguları verimliliğini en üst düzeye çıkararak çok yararlı bir amaca hizmet eder. Ayrıca kilit etkinleşmesini kilitleri izlemek için gerekli belleği en aza indirmek için yardımcı olur. Böylece kilit etkinleşmesini ve kilit bellek yeterince büyük büyüyor devre dışı bırakırsanız, ek kilit herhangi bir sorgu için ayrılacak denemeleri başarısız olabilir ve aşağıdaki hata oluşuyor SQL Server kilit yapıları için dinamik olarak ayırabilirsiniz bellek sınırlıdır:


Hata: 1204, önem derecesi: 19, durumu: 1
SQL Server kilit kaynak şu anda alınamıyor. Daha az etkin kullanıcılar varken deyiminiz yeniden çalıştırın veya SQL Server kilit ve bellek yapılandırmasını denetlemek için sistem yöneticinize sorun.

Not: "1204" hatası oluştuğunda, etkin ifadeyi işlemeyi durdurur ve etkin bir işlem, bir geri alma neden olur. Rollback kullanıcıları engellemek veya SQL Server hizmetini yeniden başlatın, bir uzun veritabanı kurtarma saat neden olabilir.

Bir satırı KİLİTLE gibi kilit ipucu kullanarak yalnızca ilk kilit planını değiştirir. Kilit etkinleşmesini kilit ipuçları engellemez.



Bu makalenin önceki bölümlerinde anlatılan kilit etkinleşmesini engelleyerek diğer yöntemleri izleme bayrağı etkin daha iyi seçeneklerdir. Ayrıca, diğer yöntemler genellikle daha iyi performans sorgusu için tam örnek için kilit etkinleşmesini devre dışı bırakılması daha sonuçlanır. Microsoft ele bu daha önce bu makalede, araştırılan gibi diğer seçenekler sırasında kilit etkinleşmesini neden olduğu yalnızca ciddi engelleme azaltmak bu izleme bayrağı etkin önerir. İzleme bayrağı açık biçimde etkinleştirmek için her SQL Server başlatıldığında, sunucu başlangıç parametresi ekleyin.

Sunucu başlangıç parametresi eklemek için Enterprise Manager içinde SQL server'ı sağ tıklatın, Özellikler' i tıklatın ve sonra Genel sekmesinde, Başlangıç parametreleri' ı tıklatın ve sonra (tam olarak gösterildiği gibi) aşağıdaki parametreyi ekleyin:

-T1211Değişikliklerin etkili olması yeni bir başlangıç parametresi için SQL Server hizmetinin geçiş yapmak gerekir. Sorgu Çözümleyicisi'nde aşağıdaki sorguyu çalıştırırsanız, izleme bayrağı hemen etkili olur:

DBCC TRACEON (1211, -1)

Ancak, eklediğiniz değil, -T1211 başlangıç parametresi traceon komut etkisi kaybolur, SQL Server hizmetini yeniden sağlanıncaya. İzleme bayrağı açarak tüm gelecekteki kilit Yardım istekleri engeller, ancak zaten etkin bir işlem içinde oluşmuş kilit Yardım istekleri ters değil.

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?

Geri bildiriminiz için teşekkürler!

×