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
| Parametre | Değer | Açıklama |
|---|---|---|
| Toplam RAM | 32 GB | Fiziksel RAM miktarı |
| max server memory | 24 GB | SQL Server için üst sınır |
| min server memory | 6 GB | Minimum stabil çalışma belleği |
| OS ve diğer servisler | 8 GB | Sistem, 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.