MSSQLSERVER_8645

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 8645
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico MEMTIMEDOUT_ERR
Testo del messaggio Timeout durante l'attesa di risorse di memoria per l'esecuzione della query nel pool di risorse '%ls' (%ld). Eseguire nuovamente la query.

Spiegazione

Questo errore viene generato se una richiesta di SQL Server ha aspettato l'esecuzione della query (QE) memoria per un lungo periodo di tempo e memoria non era disponibile. La memoria di esecuzione delle query viene usata principalmente per operazioni di ordinamento, operazioni hash, operazioni di copia bulk e creazione e popolamento degli indici. Una query che esegue una di queste operazioni richiede una concessione di memoria. Se non è disponibile memoria, la query viene impostata per attendere un RESOURCE_SEMAPHORE fino a quando la memoria non diventa disponibile. Se la memoria non è disponibile dopo più di 20 minuti di attesa, SQL Server termina la query con l'errore 8645 "Si è verificato un timeout durante l'attesa che le risorse di memoria eseseguono la query nel pool di risorse 'default'. Il valore di timeout varia leggermente tra le versioni di SQL Server. È possibile visualizzare il valore di timeout impostato a livello di server esaminando timeout_sec in sys.dm_exec_query_memory_grants.

Causa

Questo errore può essere visualizzato in relazione alle concessioni di memoria e alle attese prolungate per la disponibilità della memoria. In genere, quando una query viene completata, rilascia la memoria di esecuzione usata. Pertanto, se viene visualizzato questo errore, significa che la query di timeout ha aspettato che alcune altre richieste per oltre 20 minuti completino il lavoro. Potrebbe esserci una sola richiesta che ha utilizzato tutta la memoria QE disponibile o che potrebbero esserci molte richieste e insieme le concessioni di memoria hanno esaurito la memoria QE. Se nel carico di lavoro sono presenti richieste a esecuzione prolungata, è necessario adottare misure per migliorare la durata dell'esecuzione e ridurre la quantità di memoria QE usata.

Azione utente

Se non si usa Resource Governor per limitare il pool di memoria per determinati carichi di lavoro, è possibile verificare lo stato complessivo del server e il carico di lavoro. Se si usa Resource Governor, controllare le impostazioni del pool di risorse o del gruppo di carico di lavoro.

Una spiegazione dettagliata e i passaggi per la risoluzione dei problemi sono descritti in Risolvere i problemi relativi a prestazioni lente o a memoria insufficiente causati dalle concessioni di memoria in SQL Server.

L'elenco seguente riepiloga i passaggi descritti in dettaglio nell'articolo precedente. Questi passaggi consentono di ridurre o eliminare gli errori di memoria QE:

  1. Identificare le richieste in SQL Server come consumer di memoria di grandi dimensioni o consumer di memoria QE. Per altre informazioni, vedere Come identificare le attese per la memoria di esecuzione delle query.

  2. Riscrivere le query per ridurre al minimo o evitare operazioni di ordinamento e hash.

  3. Aggiornare le statistiche e mantenerle aggiornate regolarmente per assicurarsi che SQL Server stima correttamente la concessione di memoria.

  4. Creare indici appropriati per la query o le query identificate. Gli indici possono ridurre il numero elevato di righe elaborate, modificando così gli algoritmi JOIN e riducendo le dimensioni delle concessioni o eliminandole completamente.

  5. Usare l'hint OPTION (min_grant_percent = XX, max_grant_percent = XX) nelle query, dove possibile.

  6. Usare Resource Governor per limitare l'effetto dell'utilizzo della memoria QE solo a un determinato carico di lavoro.

  7. SQL Server 2017 e 2019 usano l'elaborazione di query adattive, consentendo al meccanismo di feedback delle concessioni di memoria di regolare le dimensioni delle concessioni di memoria in modo dinamico in fase di esecuzione. Questa funzionalità può impedire problemi di concessione di memoria al primo posto.

  8. Aumentare la memoria di SQL Server o modificare le impostazioni esistenti.

    1. Verificare i seguenti parametri di configurazione della memoria di SQL Server:

      • max server memory - aumentare se necessario
      • min server memory
      • min memory per query
    2. Valutare eventuali impostazioni non comuni e, se necessario, correggerle. Tenere conto di requisiti di memoria maggiori per SQL Server. Le impostazioni predefinite e consigliate sono elencate nelle opzioni di configurazione della memoria del server.

  9. Aumentare la memoria a livello di sistema operativo (RAM fisica o virtuale).

  10. Verificare se altre applicazioni o servizi utilizzano la memoria nel server specificato. Riconfigurare applicazioni o servizi meno critici per utilizzare meno memoria o spostarli in un server separato. Questa azione può rimuovere la pressione di memoria esterna.

  11. Eseguire i comandi DBCC seguenti per liberare diverse cache di memoria di SQL Server: una misura temporanea.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE