SQL Server performansını etkileyen en önemli unsurlardan biri bellek (memory) yönetimidir. Doğru yapılandırılmış bellek ayarları sorgu hızından, tempdb yönetimine, hatta sistem kararlılığına kadar birçok bileşeni doğrudan etkiler. Yanlış yapılandırılmış bellek değerleri ise yavaş sorgular, tempdb tıkanmaları, paging sorunları ve hatta sunucu çökmesine kadar uzanan kritik problemler yaratabilir.

Bu makalemde SQL Server’ın Minimum ve Maximum Server Memory ayarlarını teknik derinliğiyle inceleyip, en iyi uygulama senaryoları (best practice) ve izleme yöntemleriyle konuyu bütüncül biçimde ele alacağız.

SQL Server’da Bellek Yönetimi Nasıl Çalışır?

SQL Server belleği dinamik olarak yöneten bir mimariye sahiptir. İlk başlatıldığında ihtiyaç duyduğu kadar RAM kullanmaya başlar ve zamanla sorgu yüküne göre bellek tüketimini artırır veya azaltır. Ancak bellek geri bırakımı (memory release) süreci genellikle işletim sistemi baskısı altında gerçekleşir. Yani OS (Operating System) “belleğe ihtiyacım var” diyene kadar SQL Server elindeki belleği serbest bırakmaz. Bu durum OS tarafında kaynak yetersizliği ve “Low Memory Condition” hatalarına yol açabilir. İşte bu nedenle Maximum Server Memory sınırını doğru belirlemek son derece önemlidir.

Maximum Server Memory (Maksimum Bellek)

max server memory (MB) parametresi SQL Server’ın kullanabileceği en fazla RAM miktarını belirler. Bu ayar SQL Server’ın OS belleğini tamamen tüketmesini önleyerek sistem dengesini korur.

Nasıl Çalışır?

  • SQL Server buffer pool (data cache, procedure cache, execution plan cache) için belleği bu sınıra kadar kullanabilir.
  • Ancak bu sınır tamamı SQL Server’a özel değildir memory broker, CLR, linked server, backup compression, columnstore vb. bileşenler bu limitin dışında bellek tüketebilir.

Kritik Noktalar

  • Değer çok yüksek ayarlanırsa → OS kaynak sıkıntısı yaşar, disk cache performansı düşer, network veya antivirus servisleri darboğaza girer.
  • Değer çok düşük ayarlanırsa → SQL Server buffer pool’u sık sık temizler, query plan cache küçülür, CPU kullanımı artar.

En iyi uygulama önerisi

Toplam RAM’in %60–70’i genellikle optimum değerdir.
Örneğin:

  • 32 GB RAM → max server memory: 20–24 GB
  • 64 GB RAM → max server memory: 40–48 GB
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 24576; -- 24 GB
RECONFIGURE;

Minimum Server Memory (Minimum Bellek)

min server memory (MB) parametresi, SQL Server’ın her zaman en az bu kadar belleği korumasını sağlar. Yani sistemde bellek baskısı oluşsa bile SQL Server bu değerin altına inmez.

Davranış

  • SQL Server ilk başta bu belleği hemen ayırmaz; kullanım arttıkça bu seviyeye ulaşır.
  • Ancak bir kez bu değere ulaştığında, OS bellek isterse bile altına düşmez.

Neden önemlidir?

Bu ayar, SQL Server’ın bellek dalgalanmalarını önleyerek stabil performans sağlar. Sürekli sorgu yükü olan üretim ortamlarında, bu parametreyi baseline performans düzeyinde tutmak çok önemlidir.

En iyi uygulama önerisi

Toplam RAM’in %20–30’u uygun bir başlangıç noktasıdır.
Örneğin:

  • 32 GB RAM → min server memory: 6–8 GB
  • 64 GB RAM → min server memory: 12–16 GB
EXEC sp_configure 'min server memory (MB)', 6144; -- 6 GB
RECONFIGURE;

Uygulama Senaryosu 32 GB RAM’li SQL Sunucusu

ParametreDeğerAçıklama
Toplam RAM32 GBFiziksel RAM miktarı
max server memory24 GBSQL Server için üst sınır
min server memory6 GBMinimum stabil çalışma belleği
OS ve diğer servisler8 GBSistem, monitoring, antivirus, agent servisleri için ayrılan alan

Bu yapılandırmada:

  • SQL Server başlangıçta 6 GB bellek ile başlar,
  • Zamanla sorgu yüküne göre 24 GB’a kadar çıkar,
  • OS ve diğer servisler için 8 GB güvenli alan bırakılmış olur.

Performans İzleme ve Analiz

Bellek kullanımını düzenli izlemek sadece kurulumda değil operasyonel süreklilik açısından da kritiktir.

Bellek durumu sorguları

Fiziksel bellek kullanımı:

SELECT total_physical_memory_kb/1024 AS Total_MB,
       available_physical_memory_kb/1024 AS Available_MB
FROM sys.dm_os_sys_memory;

Bellek dağılımı (Memory Clerks):

SELECT type, 
       SUM(virtual_memory_committed_kb)/1024 AS Committed_MB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY Committed_MB DESC;

Buffer Pool durumu:

DBCC MEMORYSTATUS;

Ek Tavsiyelerim

  • NUMA (Non-Uniform Memory Access) yapılandırmasını kontrol edin özellikle çok çekirdekli sunucularda her NUMA node’a uygun memory dağılımı önemlidir.
  • Lock Pages in Memory özelliğini etkinleştirmek SQL Server’ın OS tarafından belleğinin disk’e page edilmesini önler. Local Security Policy → User Rights Assignment → Lock pages in memory → SQL Server service account
  • TempDB yoğun kullanımında disk IO sorunlarını gizlemek için değil, gerçekten optimize etmek için memory ayarlarını dengeleyin.
  • Bellek kullanımını analiz ederken memory pressure durumlarını (Resource Governor, Query Memory Grant) göz önünde bulundurun.