Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Ayrıntılar
| Öznitelik | Değer |
|---|---|
| Ürün Adı | SQL Server |
| Olay Kimliği | 8645 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | MEMTIMEDOUT_ERR |
| İleti Metni | '%ls' (%ld) kaynak havuzunda bellek kaynaklarının sorguyu yürütmesi beklenirken zaman aşımı oluştu. Sorguyu yeniden çalıştırın. |
Açıklama
Sql Server isteği uzun bir süre boyunca sorgu yürütme (QE) bellek iznini beklemişse ve kullanılabilir bellek yoksa bu hata oluşur. Sorgu yürütme belleği öncelikle sıralama işlemleri, karma işlemleri, toplu kopyalama işlemleri, dizin oluşturma ve popülasyon için kullanılır. Bu işlemlerden birini gerçekleştiren bir sorgu, bellek verme isteğinde bulunur. Kullanılabilir bellek yoksa, bellek kullanılabilir duruma gelene kadar sorgu bir RESOURCE_SEMAPHORE beklemeye ayarlanır.
Sorgu iyileştiricisi tarafından tahmin edilen sorgu maliyeti tarafından dinamik olarak belirlenen zaman aşımı süresi beklendikten sonra bellek kullanılamıyorsa, SQL Server sorguyu 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'. hatasıyla sonlandırır Zaman aşımı değeri SQL Server sürümleri arasında biraz farklılık gösterir, ancak maksimum bekleme zaman aşımı değeri 24 saattir.
sys.dm_exec_query_memory_grants bakarak sunucu düzeyinde timeout_sec ayarlanan zaman aşımı değerini görebilirsiniz.
Sorun giderme adımlarıyla ilgili ayrıntılı bir açıklama için SQL Server'da bellek atamalarının neden olduğu yavaş performans veya düşük bellek sorunları bölümünü gözden geçirin.
Nedeni
Bu hata, bellek verme işlemleri ve belleğin kullanılabilir duruma gelmesi için uzun süren beklemelerle ilgili olarak görülebilir. Genellikle bir sorgu tamamlandığında, kullandığı yürütme belleğini serbest bırakır. Bu nedenle, bu hatayı görürseniz zaman aşımına uğradı sorgusunun zaman aşımı süresinin ötesinde diğer isteklerin tamamlanmasını beklediği anlamına gelir. Kullanılabilir tüm QE belleğini tüketen tek bir istek olabilir veya birçok istek olabilir ve bunların bellek izinleri QE belleğini tüketmiştir. İş yükünüzde bu kadar uzun süre çalışan istekler varsa, yürütme süresini iyileştirmek ve kullandıkları QE bellek miktarını azaltmak için önlemler almanız gerekir.
Kullanıcı eylemi
Belirli iş yükleri için bellek havuzunu sınırlamak için Resource Governor kullanmıyorsanız, genel sunucu durumunu ve iş yükünü doğrulayabilirsiniz. Resource Governor kullanıyorsanız kaynak havuzu veya iş yükü grubu ayarlarını denetleyin.
Aşağıdaki listede, yukarıda belirtilen makalede ayrıntılı olarak belirtilen adımlar özetlenmiştir. Bu adımlar QE bellek hatalarını azaltmaya veya ortadan kaldırmaya yardımcı olabilir:
SQL Server'da hangi isteklerin büyük bellek verme veya QE bellek tüketicileri olduğunu belirleyin. Daha fazla bilgi için bkz. Sorgu yürütme belleği için beklemeleri tanımlama.
Sıralama ve karma işlemlerini en aza indirmek veya önlemek için sorguları yeniden yazma.
SQL Server'ın bellek atamasını doğru şekilde tahmin etmesini sağlamak için istatistikleri güncelleştirin ve düzenli olarak güncel tutun.
Tanımlanan sorgu veya sorgular için uygun dizinler oluşturun. Dizinler işlenen çok sayıda satırı azaltabilir, bu nedenle JOIN algoritmalarını değiştirebilir ve vermelerin boyutunu azaltabilir veya bunları tamamen ortadan kaldırır.
Mümkün olduğunda sorgularınızda OPTION (min_grant_percent = XX, max_grant_percent = XX) ipucunu kullanın.
QE bellek kullanımının etkisini yalnızca belirli bir iş yüküyle sınırlamak için Resource Governor'ı kullanın.
SQL Server 2017 ve 2019 uyarlamalı sorgu işlemeyi kullanarak bellek verme geri bildirim mekanizmasının çalışma zamanında bellek verme boyutunu dinamik olarak ayarlamasını sağlar. Bu özellik ilk etapta bellek verme sorunlarını engelleyebilir.
SQL Server belleğini artırın veya mevcut ayarları yapın.
Aşağıdaki SQL Server bellek yapılandırma parametrelerini denetleyin:
- en fazla sunucu belleği - gerekirse artırın
- en az sunucu belleği
- sorgu başına en az bellek
Olağan dışı ayarlara dikkat edin. Bunları gerektiği gibi düzeltin. SQL Server için daha fazla bellek gereksinimlerini hesaplayın. Varsayılan ve önerilen ayarlar Sunucu bellek yapılandırma seçeneklerinde listelenir.
İşletim sistemi düzeyinde belleği artırın (fiziksel veya sanal RAM).
Diğer uygulamaların veya hizmetlerin bu sunucuda bellek kullanıp kullanmadığını doğrulayın. Daha az bellek kullanmak veya bunları ayrı bir sunucuya taşımak için daha az kritik uygulamaları veya hizmetleri yeniden yapılandırın. Bu eylem dış bellek baskısını kaldırabilir.
Geçici bir ölçü olan birkaç SQL Server bellek önbelleğini boşaltmak için aşağıdaki DBCC komutlarını çalıştırın.
- DBCC FREESYSTEMCACHE komutu, sistem önbelleğini temizlemek için kullanılır.
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE