Aracılığıyla paylaş


MSSQLSERVER_8645

Şunlar için geçerlidir:SQL ServerAzure 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:

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

  2. Sıralama ve karma işlemlerini en aza indirmek veya önlemek için sorguları yeniden yazma.

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

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

  5. Mümkün olduğunda sorgularınızda OPTION (min_grant_percent = XX, max_grant_percent = XX) ipucunu kullanın.

  6. QE bellek kullanımının etkisini yalnızca belirli bir iş yüküyle sınırlamak için Resource Governor'ı kullanın.

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

  8. SQL Server belleğini artırın veya mevcut ayarları yapın.

    1. 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
    2. 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.

  9. İşletim sistemi düzeyinde belleği artırın (fiziksel veya sanal RAM).

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

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