Düzeltme: Yavaş performans ya da bir veritabanını geri yüklemek ve sql Server 2012 aynı anda deyimleri yürütme sırasında kilitlenme

Makale çevirileri Makale çevirileri
Makale numarası: 2725950 - Bu makalenin geçerli olduğu ürünleri görün.
Microsoft, Microsoft sql Server 2012 düzeltmeler karşıdan yüklenebilen bir dosya dağıtır. Düzeltmeleri birikimli olduğu için her yeni sürüm tüm düzeltmeleri içerir ve sürüm önceki sql Server 2012 ile gelen tüm güvenlik düzeltmelerini düzeltin.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Senaryo 1

Aşağıdaki senaryoyu düşünün:
  • Microsoft sql Server 2012'de bir veritabanını geri.
  • Veritabanı geri yükleme işlemi bitmeden başka bir işlem sys.database_recovery_status Katalog görünümü başvuran ve aynı veritabanı üzerinde bir kilit gerektirir. Örneğin, aşağıdaki select deyimini yürütün:

    SELECT * FROM sys.database_recovery_status
Bu senaryoda, veritabanı geri yükleme işlemi tamamlanana kadar bir işlem için select deyimi içinde bekler yavaş performans oluşur.

Senaryo 2

Aşağıdaki senaryoyu düşünün:
  • Bir veritabanını sql Server 2012 de geri.
  • Veritabanı geri yükleme işlemi bitmeden önce aşağıdaki deyimini yürütün:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Not , DataBaseID Veritabanı geri yükleme işlemi gerçekleştirmek veritabanının Kimliğini temsil eder.
Bu senaryoda veritabanı geri yükleme işleminde bir kilitlenme oluşur. Bu kilitlenme veritabanı geri yükleme işleminin başarısız olmasına neden olur.

Neden

"Belirtiler" bölümünde açıklanan senaryolarda, aynı nedenler tarafından neden olur.

Veritabanı geri yükleme işlemi bir veritabanı üzerinde özel kilit gerektirdiği için "Scenario1" bölümünde, sorun oluşur. Bu bölümde açıklanan deyimi yürüttüğünüzde, paylaşılan bir kilit aynı veritabanında gereklidir. Bu nedenle, özel kullanım kilidi yayımlanıncaya kadar özel kullanım kilidi için paylaşılan kilit bekler.

Bu bölümde açıklanan deyimi yürüttüğünüzde "Senaryo 2" bölümünde, paylaşılan bir kilit aynı veritabanında ve sys.sysdbreg tablosundaki gereklidir. En son aşaması olarak veritabanı geri yükleme işlemi, bir sys.sysdbreg tablosu üzerinde güncelleştirme kilidinin işlem gerektirir. Bununla birlikte, paylaşılan kilit veritabanından serbest bırakılmaz. Bu nedenle, sys.sysdbreg tablo üzerinde bir kilitlenme oluşur ve veritabanı geri yükleme işlemi, kilitlenme kurbanı olarak belirlenir.

Çözüm

Toplu Güncelleştirme bilgileri

sql Server 2012 Service Pack 1 için toplu güncelleştirme paketi 1

Bu sorunla ilgili düzeltme, ilk toplu güncelleştirme 1'de yayımlanmıştır. Bu sql Server 2012 Service Pack 1 için toplu güncelleştirme paketini elde etme 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:
2765331 sql Server 2012 Service Pack 1 için toplu güncelleştirme paketi 1
Not Yap?lar birikimli olduğu için her yeni düzeltme yayımlanan tüm düzeltmeleri içerir ve sürüm önceki sql Server 2012 ile gelen tüm güvenlik düzeltmelerini düzeltin. Bu düzeltmeyi içeren en son düzeltme sürümü uygulama ele almanızı öneririz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2772858 sql Server 2012 sql Server 2012 Service Pack 1'de yayımlandıktan sonra yayımlanan oluşturur

Toplu güncelleştirme paketi 3 için sql Server 2012

Bu sorunla ilgili düzeltme, ilk toplu güncelleştirme 3'te yayımlanmıştır. sql Server 2012 için bu toplu güncelleştirme paketini elde etme 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:
2723749 sql Server 2012 için toplu güncelleştirme 3
Not Yap?lar birikimli olduğu için her yeni düzeltme yayımlanan tüm düzeltmeleri içerir ve sürüm önceki sql Server 2012 ile gelen tüm güvenlik düzeltmelerini düzeltin. Bu düzeltmeyi içeren en son düzeltme sürümü uygulama ele almanızı öneririz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2692828 sql Server 2012'den sonra yayımlanan sql Server 2012 oluşturur

Durum

Microsoft bu sorunun, "Aşağıdakilere uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Pratik Çözüm

Senaryo 2 Bu soruna geçici bir çözüm bulmak için aşağıdaki yöntemlerden birini kullanın.
Yöntem 1


Sys.sysdbreg tablo üzerindeki paylaşılan kilit "nolock" İpucu kullanarak önlemek için ifadeyi de?i?tirin.
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Yöntem 2
"Düşük" ifadesine kilitlenme önceliğini ayarlama
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Not İkinci yöntem bildirimi hem de veritabanı geri yükleme işlemi kilitlenme önlemek için kullandığınızda, IF deyimini kodları yürütülmez.

Referanslar

Özel kilit, paylaşılan kilit ve güncelleme kilidi hakkında daha fazla bilgi için aşağıdaki msdn Web sitesine gidin:
Kilit modları hakkında genel bilgiler
sql Server için artımlı hizmet modeli daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
935897 sql Server ekibinden bildirilen sorunlar için düzeltmeler sunmak için artımlı bir hizmet modeli kullanılabilir
sql Server güncelleştirmelerinin adlandırma şeması 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:
822499 Microsoft sql Server yazılım güncelleştirme paketleri için dosya adlandırma şeması
Yazılım güncelleştirme terminolojisi 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:
824684 Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması

Özellikler

Makale numarası: 2725950 - Last Review: 20 Kasım 2012 Salı - Gözden geçirme: 2.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Anahtar Kelimeler: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 2725950

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com