SQL Server Sorgu Bellek İzni Zaman Aşımı: Aşırı Hash/Sort Rezervasyonu, sys.dm_exec_query_memory_grants ve Çözüm
Eksik indeksler ve eski istatistikler nedeniyle devasa bellek hibesi (memory grant) talep eden sorguların havuzu tıkaması; sys.dm_exec_query_memory_grants ile teşhis ve max server memory optimizasyonu.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
Sorgu çalıştırılırken sunucu aniden işlemi iptal eder:
Msg 8645, Level 17, State 1, Line 1
A timeout occurred while waiting for memory resources to execute the query in resource pool 'default' (8192).
Rerun the query.▸Sahada Ne Görürsün?
Bekleyen sorgularda RESOURCE_SEMAPHORE bekleme türü (wait type) tavan yapar. Yeni sorgular bellek izni alamadığı için sırada bekler ve istemciler zaman aşımına uğrar.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %60 | Eski İstatistikler & Kötü Sorgu Planı | SQL Server kardinaliteyi yanlış tahmin edip sorgu için gigabaytlarca bellek talep eder; az sayıda sorgu tüm havuzu rehin alır. |
| %25 | İndekssiz Büyük `SORT` ve `HASH JOIN` | Büyük tablolarda indeks eksikliği nedeniyle sıralama bellek çalışma alanında (workspace) yapılır. |
| %15 | `max server memory` Yanlış Yapılandırması | Sunucuda SQL Server için yeterli bellek ayrılmamıştır. |
▸ACİL RUNBOOK (0-5dk)
-- 1. Bellek izni bekleyen (kilitlenen) sorguları bul
SELECT session_id, request_time, grant_time, requested_memory_kb, granted_memory_kb, query_cost
FROM sys.dm_exec_query_memory_grants
WHERE grant_time IS NULL
ORDER BY requested_memory_kb DESC;
-- 2. Havuzu rehin alan dev sorguyu sonlandır
KILL 78; -- session_id
-- 3. Acil nefes alma (tüm önbelleği boşaltma - dikkatli kullanın)
DBCC FREEPROCCACHE;▸KALICI BLUEPRINT
- 1İstatistikleri Güncel Tutun: Otomatik istatistik güncelleme (
AUTO_UPDATE_STATISTICS) açık tutulmalı, büyük tablolarda tam tarama (FULLSCAN) ile güncellenmelidir. - 2Resource Governor ile İzolasyon: Raporlama ve analitik sorgular için maksimum bellek kotası (%20) tanımlanmış ayrı bir kaynak havuzu (Resource Pool) oluşturulmalıdır.
- 3`max server memory` Hesabı: İşletim sistemine en az %20 RAM payı bırakılmalıdır.
▸Doğrulama
SELECT waiter_count, total_memory_kb, available_memory_kb
FROM sys.dm_exec_query_resource_semaphores;Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.