Aracılığıyla paylaş


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

Bu makalede, SQL Server arabellek havuzunu tarama işleminin büyük bellekli bilgisayarlarda tamamlanmasının nasıl uzun sürebileceği açıklanmaktadı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 havuzunu taramak 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 diferansiyel veritabanı yedekleme
  • Veritabanı geri yükleme
  • İşlem günlüğü geri yükleme
  • Çevrimiçi geri yükleme
  • DBCC CHECKDB veya DBCC CHECKTABLE işlemi

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. Daha fazla bilgi için 'https://go.microsoft.com/fwlink/?linkid=2132602' bölümüne bakın.

Uzun bir taramayı teşhis etmek için Uzatılmış Olay

Ayrıca, SQL Server 2016 SP3, SQL Server 2017 CU23 ve SQL Server 2019 CU9 derlemeleriyle 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ı veritabanı_kimlik geçen_zaman_ms komut operasyon scanned_buffers toplam_yinelenen_arabellekler
buffer_pool_scan_complete 7 1308 YEDEKLEME VERITABANı FlushCache 243 19932814

Not

XEvent'teki eşik, bilgileri daha ayrıntılı bir şekilde yakalamanıza olanak sağlamak için daha küçüktür.

Geçici çözüm

SQL Server 2022'ye başlamadan önce bu sorunu ortadan kaldırmanın hiçbir yolu yoktu. Arabellek havuzunu temizlemek için herhangi bir işlem yapmanız önerilmez çünkü temiz arabelleklerin (DBCC DROPCLEANBUFFERS) arabellek havuzundan bırakılması önemli bir performans düşüşüyle sonuçlanabilir. Veritabanı sayfalarının bellekten kaldırılması, sonraki 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ş çıkmasına neden olur.

SQL Server 2022'de arabellek havuzu taramaları birden çok çekirdek kullanılarak paralelleştirildiğinden bu sorun giderilir. 8 milyon arabellek (64 GB) başına bir görev olacaktır, eğer arabellek sayısı 8 milyondan azsa seri tarama hala kullanılacak. Daha fazla bilgi için Arabellek Havuzu Paralel Tarama videosunu izleyin.

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.