SQL Server Memory Pressure: PLE Drops and Memory Grants Pending
Finds the cause of low Page Life Expectancy and pending memory grants: wrong max server memory, large query grants, missing indexes and stale statistics.
Operational Safety & Risk Notice
This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.
1. Symptom & Signals
- Page Life Expectancy (PLE) uzun süre düşük (M25 < 300-1000) veya sürekli testere dişi.
- `Memory Grants Pending` > 0 (M26).
- Wait stats'te `RESOURCE_SEMAPHORE`, yüksek `PAGEIOLATCH_*` (S47).
- Sorgular çalışmaya başlayamıyor, genel yavaşlama, yüksek disk okuma.
2. Business & Technical Impact
Sorgular bellek tahsisi için kuyrukta bekler (başlamadan donar), disk okuma artar, genel gecikme. En kötü durumda uygulama zaman aşımları.
3. Diagnosis & Root-Cause Analysis
SELECT physical_memory_kb/1024 AS os_ram_mb FROM sys.dm_os_sys_info;
SELECT name, value_in_use FROM sys.configurations
WHERE name IN ('max server memory (MB)','min server memory (MB)');
SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Page life expectancy','Memory Grants Pending','Total Server Memory (KB)','Target Server Memory (KB)');- `max server memory` varsayılan (2147483647) ise SQL Server işletim sisteminin belleğini yiyebilir veya OS baskısı oluşur.
- Total ≈ Target: SQL Server hedef belleğe ulaştı, daha fazlası gerek.
SELECT session_id, requested_memory_kb/1024 AS requested_mb,
granted_memory_kb/1024 AS granted_mb, wait_time_ms, query_cost,
dop, is_next_candidate
FROM sys.dm_exec_query_memory_grants
ORDER BY requested_memory_kb DESC;- Birkaç sorgu çok büyük istek yapıyor: yanlış kardinalite tahmini (eski istatistik, S54) veya sort/hash gerektiren eksik indeks.
- Çok sayıda orta boy sorgu: yüksek eşzamanlılık, bellek yetersizliği.
- PLE yalnızca bakım/yedek saatlerinde düşüyor: normal olabilir.
4. Remediation & Action Plan
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 57344; -- örnek: 64 GB RAM sunucu
RECONFIGURE;KILL <session_id>;UPDATE STATISTICS dbo.tablo_adi WITH FULLSCAN;5. **Kalıcı:** Sorgu ve indeks optimizasyonu (eksik indeksler S43, gereksiz taramalar), gerekirse RAM artırımı. `FREEPROCCACHE` veya `DROPCLEANBUFFERS` **üretimde bellek sorununu çözmez**, sorunu kötüleştirir; kullanmayın.
5. Verification & Health Checks
- PLE kararlı şekilde yükseliyor, M26 = 0.
- `RESOURCE_SEMAPHORE` beklemeleri wait stats'te düştü.
- Disk okuma gecikmesi ve genel sorgu süreleri iyileşti.
6. Rollback & Contingency Plan
- `sp_configure 'max server memory (MB)'` değerini önceki değere çevirin.
- `KILL` geri alınamaz; ilgili işlem rollback olur.
- Resource Governor değişikliklerini devre dışı bırakmak için `ALTER RESOURCE GOVERNOR DISABLE;`.