KB4338890 - DÜZELTME: SQL Server 2014, 2016 ve 2017'de "verimsiz Zamanlayıcı" hatası ve SQL Server yanıt vermiyor

Uygulandığı Öğe
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Belirtiler

Microsoft SQL ServerSQL Server 2014, 2016 veya 2017'nin yüklü olduğunu varsayalım.  Aşağıdaki sorunlardan biriyle veya birkaçıyla karşılaşabilirsiniz:

  • SQL Server örneği yanıt vermiyor gibi görünüyor ve "Verimsiz Zamanlayıcı" hatası oluşuyor. Kurtarmak için sunucuyu yeniden başlatmanız gerekebilir.
  • Bir işlemin geri alınmasının tamamlanması uzun zaman alabilir. Çoğu durumda, örneğin yeniden başlatılması, veritabanının geri alma işleminden çok daha hızlı kurtarılmasını sağlar. Geri alma işleminin tamamlanmasının uzun sürmesinin birçok nedeni olduğunu unutmayın. Yeniden başlatmaya çalışmadan önce geri alma işlemlerini izleme hakkında ayrıntılı bilgi için aşağıdaki "Daha Fazla Bilgi" bölümüne bakın.
  • SOS_OBJECT_STORE gibi spinlock'larda yüksek beklemeler görebilirsiniz.

Çözüm

Bu sorun, SQL ServerSQL Server için aşağıdaki toplu güncelleştirmelerde düzeltilmiştir:

Cumulative Update 9 for SQL ServerSQL Server 2017

SQL Server 2016 SP2 için Toplu Güncelleştirme 2

SQL Server toplu güncelleştirmeleri hakkında:

SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmeye dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:

En son toplu güncelleştirme SQL ServerSQL Server 2017

SQL Server 2016 için en son toplu güncelleştirme

SQL Server 2014 için en son toplu güncelleştirme

Service pack information for SQL ServerSQL Server

Bu güncelleştirme, aşağıdaki SQL Server hizmet paketinde düzeltilmiştir:

Service Pack 3 for SQL ServerSQL Server 2014

SQL Server için hizmet paketleri hakkında:

Hizmet paketleri birikimlidir. Her yeni hizmet paketi, yeni düzeltmelerle birlikte önceki hizmet paketlerindeki düzeltmeleri de içerir. Önerimiz, en son hizmet paketini ve bu hizmet paketine yönelik en son toplu güncelleştirmeyi uygulamanızdır. En son hizmet paketini yüklemeden önce önceki bir hizmet paketini yüklemenize gerek yoktur. En son hizmet paketi ve en son toplu güncelleştirme hakkında daha fazla bilgi bulmak için aşağıdaki makalede yer alan Tablo 1'i kullanın.

SQL Server ve bileşenlerinin sürüm, sürüm ve güncelleştirme düzeyini belirleme

Daha Fazla Bilgi

Uzun süre çalışan bir işlem, işlem günlüğü dosyasında çok sayıda VLF, yavaş G/Ç vb. gibi bir geri alma işleminin uzun sürmesinin birçok nedeni vardır. Bu makalede açıklanan sorunun yavaş geri almanın temel nedeni olduğunu doğrulamak için geri alma işleminin ilerleme durumunu izlemek üzere aşağıdaki tekniklerin kullanılmasını öneririz:

  • sys.dm_exec_requests komutu "KILLED/ROLLBACK" olarak ayarlanmış session_id belirleyin ve oturumun ilerlemeyi gösteren hem GÇ hem de CPU zamanı biriktirdiğinden emin olun. GÇ değişmiyorsa, bu makalede açıklanan sorunla karşılaştığınızın göstergesi olabilir.
  • Aşağıdaki gibi bir sorgu kullanarak geri alma işleminin geçerli durumunu belirlemek için sys.dm_tran_database_transactions sorgulayın:

Not

  • SELECT getdate() as CurrentTime, database_transaction_next_undo_lsn,database_transaction_begin_lsn,t.transaction_id,database_transaction_begin_time,database_transaction_log_record_count,db_name(t.database_id)
  • FROM sys.dm_tran_database_transactions t
  • JOIN sys.dm_exec_requests s
       ON t.transaction_id=s.transaction_id
  • WHERE t.database_id=db_id('<Veritabanı Adı') ve s.session_id=<Session_id>

Not:

Yukarıdaki sorguda,

database_transaction_next_undo_lsn , geri alınacak bir sonraki kaydın LSN'sidir. database_transaction_begin_lsn , işlem günlüğündeki hareket için başlangıç kaydının LSN'sidir.

database_transaction_next_undo_lsn bu sorgunun her anlık görüntüsünde azalıyor olmalıdır. database_transaction_next_undo_lsn database_transaction_begin_lsn ulaştığında geri alma işlemi başarıyla tamamlanır.

Buradaki amaç, önceden belirlenmiş bir aralık içinde önceki sorgunun birkaç anlık görüntüsünü almak ve ardından bu aralıkta database_transaction_next_undo_lsn işlenen LSN'lerin deltasını kullanmak ve database_transaction_next_undo_lsndatabase_transaction_begin_lsn ulaşması için gereken süreyi tahmin etmektir.

Her anlık görüntü arasında geri alma işlemi makul bir hızda ilerliyorsa, SQL Server örneği yeniden başlatmadan kendi kendine geri alma işleminin tamamlanmasına izin verilmesini öneririz.

Uzun süre çalışan kurtarma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Başvurular

Microsoft'un yazılım güncelleştirmelerini tanımlamak için kullandığı terminoloji hakkında bilgi edinin.