Arabellek havuzu taramasını tetikleyen işlemler büyük bellekli bilgisayarlarda yavaş çalışabilir

Bu makalede, SQL Server arabellek havuzunu taramanın büyük bellekli bilgisayarlarda tamamlanmasının nasıl uzun sürebileceği açıklanır.

Şunlar için geçerlidir: SQL Server
Özgün KB numarası: 4566579

Belirtiler

Microsoft SQL Server'daki bazı işlemler arabellek havuzunun (veritabanı sayfalarını bellekte depolayan önbellek) taranması tetikler. Büyük miktarda RAM 'e (1 TB veya daha fazla bellek) sahip sistemlerde arabellek havuzunun taranması uzun sürebilir. Bu, taramayı tetikleyen işlemi yavaşlatır.

Arabellek havuzu taramasına neden olan işlemler

Arabellek havuzu taramasının gerçekleşmesini tetikleyebilecek bazı işlemler şunlardır:

  • Veritabanı başlatma
  • Veritabanı kapatma veya yeniden başlatma
  • AG yük devretme
  • Veritabanı kaldırma (bırakma)
  • Veritabanından dosya kaldırma
  • Tam veya değişiklik veritabanı yedeklemesi
  • Veritabanı geri yükleme
  • İşlem günlüğü geri yükleme
  • Çevrimiçi geri yükleme
  • DBCC CHECKDB veya DBCC CHECKTABLE işlem

Hata günlüğü taramanın uzun sürdüğünü gösteriyor

SQL Server 2016 SP3, SQL Server 2017 CU23 ve SQL Server 2019 CU9'dan başlayarak, arabellek havuzu taramasının uzun sürdüğünü (10 saniye veya daha uzun) belirtmek için SQL Server Hata günlüğüne bir hata iletisi eklendi:

Arabellek Havuzu taraması 14 saniye sürdü: veritabanı kimliği 7, 'BACKUP DATABASE' komutu, 'FlushCache' işlemi, taranan arabellekler 115, toplam yinelemeli arabellek 204640239, bekleme süresi 0 ms. https://go.microsoft.com/fwlink/?linkid=2132602Daha fazla bilgi için '' bölümüne bakın.

Uzun bir taramayı tanılamak için Genişletilmiş Olay

Ayrıca, 2016 SP3, SQL Server 2017 CU23 ve SQL Server 2019 CU9 SQL Server aynı derlemelerle başlayarak, uzun arabellek havuzu taramalarını belirlemenize yardımcı olmak için buffer_pool_scan_complete Genişletilmiş olayı kullanıma sunulmuştur.

Tarama 1 saniyeden uzun sürerse, olay etkinleştirildiğinde XEvent aşağıdaki gibi kaydedilir.

Adı Database_id elapsed_time_ms komut Işlem scanned_buffers total_iterated_buffers
buffer_pool_scan_complete 7 1308 YEDEKLEME VERITABANı FlushCache 243 19932814

Not

Eşik, bilgileri daha ince ayrıntı düzeyinde yakalamanıza olanak sağlamak için XEvent'te daha küçüktür.

Geçici Çözüm

SQL Server 2022'ye kadar bu sorunu ortadan kaldırmanın hiçbir yolu yoktu. Arabellek havuzundan temiz arabelleklerin (DBCC DROPCLEANBUFFERS) bırakılması performansta önemli bir düşüşe neden olabileceğinden arabellek havuzunu temizlemek için herhangi bir eylem gerçekleştirmeniz önerilmez. Veritabanı sayfalarının bellekten kaldırılması, izleyen sorgu yürütmelerinin disk üzerindeki veritabanı dosyalarından verileri yeniden okumasına neden olur. Disk G/Ç aracılığıyla verilere erişme işlemi sorguların yavaşlamasına neden olur.

SQL Server 2022'de arabellek havuzu taramaları birden çok çekirdek kullanılarak paralelleştirildiğinden bu sorun giderildi. 8 milyon arabellek (64 GB) başına 8 milyondan az arabellek varsa seri taramanın hala kullanılacağı bir görev olacaktır. Daha fazla bilgi için Arabellek Havuzu Paralel Tarama'yı watch.

Daha fazla bilgi

Büyük arabellek havuzlarında oluşabilecek sorunlar hakkında daha fazla bilgi için bkz. SQL Server: büyük RAM ve VERITABANı Denetim Noktası Oluşturma.