Buffer Pool Extension Nedir

Buffer Pool Extension (Arabellek Havuzu Uzantısı), SQL Server’ın bellek yönetimini iyileştirmek için SSD veya NVMe gibi yüksek hızlı depolama birimlerini RAM’e ek olarak kullanmasını sağlayan bir özelliktir.

SQL Server, sık erişilen veri sayfalarını RAM’de (Buffer Pool) tutar.RAM dolduğunda, daha az kullanılan sayfalar diske (tempdb veya LDF/MTF dosyaları)yazılır.Buffer Pool Extension, bu mekanizmaya SSD-NVMe’yi ekleyerek, disk I/O performansını artırır.

Kısacası yapının nasıl çalıştığına değinmek gerekirse, En sık kullanılan veriler burada tutulur. RAM dolunca, “cold” (soğuk) sayfalar SSD-NVMe taşınır. Bu yapı ikinci ön bellek olarak ifade edilmektedir. Geleneksel olarak en az kullanılan veriler ise HDD-SSD yapısında bulunur.

Senaryomuz aşağıdaki şekilde işlemektedir.

RAM (32 GB) → [Sık Erişilen Veriler]
↓ (RAM dolunca)
SSD (Buffer Pool Extension – 64 GB) → [Orta Sıklıkta Erişilen Veriler]
↓ (SSD de dolunca)
HDD (Normal Depolama) → [Nadir Erişilen Veriler]

Şimdi yukarıdaki bahsedilen olayların avantajlarına dezavantajlarına değinelim.

Daha Az Disk Gecikmesi: SSD, HDD’den 10-100x daha hızlıdır.
RAM Maliyetini Azaltır: 128 GB RAM yerine 32 GB RAM + 256 GB SSD kullanılabilir.
Özellikle Read-Intensive (Çok Okunan) İş Yüklerinde İyi Sonuç Verir. Reporting sorguları, Data warehousing, Büyük ölçekli analitik sorgular işlemlerinde faydalıdır.

Kısacası Buffer Pool Extension , SSD’yi sanal RAM gibi kullanarak bu sorunu hafifletir.

BPE çoğunlukla okuma (read) performansını artırır. Yoğun yazma işlemlerinde (INSERT/UPDATE/DELETE) çok etkili değildir. Aşırı yazma iş yükü SSD’yi hızla eskitebilir. Zaten yeterli RAM varsa, BPE performansı çok artırmaz.

Enterprise Edition’da sınırsız  Buffer Pool Extension boyutu verilebilir. Standard Edition’da maksimum Ram boyutunun 4 katı kadar verilebilir.

Bizler Buffer Pool Extension yapısını ne zaman veya hangi durumlarda tercih etmeliyiz. Öncelikle ram yetersiz ve ssd-nvme disk varsa bu yapıya geçirilebilir. Aynı zaman okuma işleri daha çok ağırlıklıysa bu yapıya geçilmesi faydalıdır. Ram boyutunuz yetersiz ilgili alan fiziksel olarak artırılana kadar geçici olarak bu yapı oluşturulabilir.

Buffer Pool Extension yapısını oluşturma ve kontrol işlemi için aşağıdaki yapı kullanılmaktadır. Veri kaybını engellemek için sadece commit edilmiş veriler Buffer Pool Extension’a yazılır. Buffer Pool Extension’ı aşağıdaki script yardımıyla çalışan bir sistem için gerçekleştirebiliriz.

-- Örnek: 16 GB'lık bir BPE dosyası oluşturma
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION ON
(FILENAME = 'F:\SQL_BPE\BufferPoolExtension.BPE', SIZE = 16 GB);

Aşağıdaki komut ile buffer pool extension işlemini kontrol edebiliriz.

SELECT * FROM sys.dm_os_buffer_pool_extension_configuration;

Tekrardan oluşturduğumuz buffer pool extension yapısını kapatmak için aşağıdaki komut kullanılmaktadır.

ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION OFF;

Not: Eğer Buffer Pool Extension için set ettiğiniz alan SQL Server için set ettiğiniz MAX SERVER MEMORY’den küçükse aşağıdaki gibi bir hata alırsınız. Bunun için sp_configure üzerinden max server memory alanını düzenlemeniz gerekmektedir. SQL Server, BPE’yi RAM’in bir uzantısı olarak kullanır, bu nedenle MAX SERVER MEMORY’den büyük olması mantıksız olur.

The buffer pool extension size must not exceed the maximum server memory (MAX SERVER MEMORY) setting.

Buffer Pool Extension’ı kapattıktan sonra tekrar açmak istediğinizde set edeceğiniz değer MAX SERVER MEMORY’den büyükse ve daha önce Buffer Pool Extension için set ettiğiniz alan’dan küçükse yine bu hatayı alırsınız.  Eski BPE dosyasını küçültmek performans sorunlarına yol açabileceğinden, SQL Server buna izin vermez.

Buffer pool extension, geçici bir performans çözümüdür. Modern sistemlerde In-Memory OLTP veya daha fazla RAM tercih edilmelidir. Başka makalede görüşmek dileğiyle..

“De ki: Ey Rabbim! İlmimi artır.” Taha-114

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir