dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/sqlserver-8645-memory-grant-timeout
SQL Server
SQL Server 2017 - 2022Bellek & Kaynak
10 dk okuma
Msg 8645, Level 17: A timeout occurred while waiting for memory resources to execute the query in resource pool 'default'

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.

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: SQL Server 2017 / 2019 / 2022

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerSQL Server 2019 CU27, 2022 CU14
Gerekli YetkiVIEW SERVER STATE yetkisi
Risk Seviyesi
HighDBCC FREEPROCCACHE komutu tüm plan önbelleğini silerek ani CPU tavanına yol açar; acil durum nefes alma dışında kullanılmamalıdır
Beklenen Çıktısys.dm_exec_query_memory_grants sorgusunda grant_time IS NULL olan bekleyen satırların sıfırlanması
Geri Dönüş (Rollback) Planı:Max server memory ve Resource Governor ayarlarını düzenleme
Microsoft Docs: sys.dm_exec_query_memory_grants
İlk 60 Saniye Teşhis Protokolü:

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:

plaintext
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ıkKök NedenAçıklama
%60Eski İ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)

sql
-- 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. 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.
  2. 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. 3`max server memory` Hesabı: İşletim sistemine en az %20 RAM payı bırakılmalıdır.

▸Doğrulama

sql
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.

Tüm Hatalar (82)