Condividi tramite


Risolvere i problemi di memoria insufficiente

SQL Server In-Memory OLTP usa più memoria e in modi diversi rispetto a SQL Server. È possibile che la quantità di memoria installata e allocata per In-Memory OLTP diventi inadeguata per le esigenze crescenti. In tal caso, è possibile che la memoria risulti insufficiente. In questo argomento viene descritto come risolvere una situazione di memoria insufficiente. Per le linee guida che consentono di evitare molte situazioni di memoria insufficiente, vedere Monitorare e risolvere i problemi relativi all'utilizzo della memoria .

Sezioni dell'argomento

Argomento Panoramica
Risoluzione degli errori di ripristino del database dovuti a memoria insufficiente Cosa fare se viene visualizzato il messaggio di errore "Operazione di ripristino non riuscita per il database '<databaseName>' a causa di memoria insufficiente nel pool di risorse '<resourcePoolName>'".
Risoluzione dell'impatto delle condizioni di memoria insufficiente sul carico di lavoro Operazioni da eseguire nel caso in cui i problemi di memoria insufficiente incidono negativamente sulle prestazioni.
Risoluzione degli errori di allocazione della pagina dovuti a memoria insufficiente quando è disponibile memoria sufficiente Cosa fare se viene visualizzato il messaggio di errore "Disallowing page allocations for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'. ..." quando la memoria disponibile è sufficiente per l'operazione.

Risoluzione degli errori di ripristino del database dovuti a memoria insufficiente

Quando si tenta di ripristinare un database, è possibile che venga visualizzato il messaggio di errore "Operazione di ripristino non riuscita per il database '<databaseName>' a causa di memoria insufficiente nel pool di risorse '<resourcePoolName>'". Prima di poter ripristinare correttamente il database, è necessario risolvere il problema di memoria insufficiente rendendo disponibile più memoria.

Per risolvere l'errore di recupero a causa delle memoria insufficiente, aumentare la memoria disponibile usando uno o tutti questi metodi per aumentare temporaneamente la memoria disponibile per l'operazione di recupero.

  • Chiudere temporaneamente le applicazioni in esecuzione.
    Chiudendo una o più applicazioni in esecuzione, ad esempio Visual Studio, Internet Explorer, OneNote e altre, si libera la memoria usata da tali applicazioni rendendola disponibile per l'operazione di ripristino. È possibile riavviarle dopo il completamento del ripristino.

  • Aumentare il valore di MAX_MEMORY_PERCENT.
    Nel frammento di codice seguente il valore di MAX_MEMORY_PERCENT per il pool di risorse PoolHk viene modificato al 70% della memoria installata.

    Importante

    Se il server è in esecuzione in una VM e non è dedicato, impostare il valore di MIN_MEMORY_PERCENT sullo stesso valore di MAX_MEMORY_PERCENT.
    Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM.

    
    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Per informazioni sui valori massimi per MAX_MEMORY_PERCENT vedere la sezione Percentuale di memoria disponibile per tabelle e indici ottimizzati per la memoria

  • Riconfigurare max server memory.
    Per informazioni sulla configurazione di max server memory vedere l'argomento Ottimizzazione delle prestazioni del server tramite le opzioni di configurazione della memoria.

Risoluzione dell'impatto delle condizioni di memoria insufficiente sul carico di lavoro

Ovviamente, è consigliabile non trovarsi in una situazione di memoria insufficiente. Una buona pianificazione e un buon monitoraggio consentono di evitare le situazioni di memoria insufficiente. Tuttavia, nonostante l'accurata pianificazione non sempre è possibile prevedere le effettive esigenze e potrebbero verificarsi situazioni di memoria insufficiente. Sono disponibili due passaggi per risolvere una situazione di memoria insufficiente:

  1. Aprire una connessione amministrativa dedicata (DAC)

  2. Intraprendere un'azione correttiva

Aprire una connessione amministrativa dedicata (DAC)

Microsoft SQL Server fornisce una connessione amministrativa dedicata (DAC). La connessione DAC consente a un amministratore di accedere a un'istanza in esecuzione del motore di database di SQL Server per risolvere i problemi presenti nel server, anche quando il server non risponde ad altre connessioni client. La connessione DAC è disponibile tramite l'utilità sqlcmd e SQL Server Management Studio (SSMS).

Per informazioni sull'uso di sqlcmd e della connessione DAC, vedere Utilizzo di una connessione amministrativa dedicata. Per informazioni sull'uso della connessione DAC tramite SSMS, vedere Procedura: Utilizzo della connessione amministrativa dedicata con SQL Server Management Studio.

Intraprendere un'azione correttiva

Per risolvere la condizione di memoria insufficiente, è necessario liberare la memoria esistente riducendone l'utilizzo o rendere disponibile una maggiore quantità di memoria per le tabelle in memoria.

Liberare memoria esistente

Eliminare le righe non essenziali delle tabelle con ottimizzazione per la memoria e attendere la procedura di Garbage Collection

È possibile rimuovere le righe non essenziali da una tabella con ottimizzazione per la memoria. Il Garbage Collector restituisce la memoria usata da queste righe alla memoria disponibile. . Il motore OLTP in memoria raccoglie rapidamente le righe di Garbage Collection. Tuttavia, una transazione con esecuzione prolungata può impedire il processo di Garbage Collection. Ad esempio, nel caso di una transazione in esecuzione per 5 minuti, le versioni di riga create a causa delle operazioni di aggiornamento/eliminazione mentre la transazione era attiva non possono essere sottoposte al processo di Garbage Collection.

Spostare una o più righe in una tabella basata su disco

Gli articoli di Technet riportati di seguito offrono istruzioni sullo spostamento di righe da una tabella ottimizzata per la memoria a una tabella basata su disco.

Aumentare la memoria disponibile

Aumentare il valore di MAX_MEMORY_PERCENT nel pool di risorse

Se non è stato creato un pool di risorse denominato per le tabelle in memoria, è necessario eseguire questa operazione e associarvi i database OLTP In-Memory. Vedere l'argomento Associare un database con tabelle Memory-Optimized a un pool di risorse per indicazioni sulla creazione e l'associazione dei database OLTP In-Memory a un pool di risorse.

Se il database OLTP In-Memory è associato a un pool di risorse, è possibile aumentare la percentuale di memoria a cui può accedere il pool. Per informazioni sulla modifica del valore di MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT per un pool di risorse, vedere l'argomento secondario Cambiare MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT in un pool esistente .

Aumentare il valore di MAX_MEMORY_PERCENT.
Nel frammento di codice seguente il valore di MAX_MEMORY_PERCENT per il pool di risorse PoolHk viene modificato al 70% della memoria installata.

Importante

Se il server è in esecuzione in una VM e non è dedicato, impostare il valore di MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT sullo stesso valore.
Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM.

  
-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor  
--    RECONFIGURE enables resource governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  
  

Per informazioni sui valori massimi per MAX_MEMORY_PERCENT, vedere la sezione dell'argomento che riporta le percentuali di memoria disponibile per indici e tabelle ottimizzate per la memoria.

Installare memoria aggiuntiva

Infine, la soluzione migliore, se possibile, prevede l'installazione di ulteriore memoria fisica. Se si esegue questa operazione, tenere presente che probabilmente sarà anche possibile aumentare il valore di MAX_MEMORY_PERCENT (vedere l'argomento secondario Modifica MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT in un pool esistente) poiché SQL Server probabilmente non richiederà più memoria, consentendo di rendere la maggior parte se non tutta la memoria appena installata disponibile per il pool di risorse.

Importante

Se il server è in esecuzione in una VM e non è dedicato, impostare il valore di MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT sullo stesso valore.
Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM.

Risoluzione degli errori di allocazione della pagina dovuti a memoria insufficiente quando è disponibile memoria sufficiente

Se viene visualizzato il messaggio di errore "Disallowing page allocations for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'. Per altre informazioni, vedere "https://go.microsoft.com/fwlink/?LinkId=330673" nel log degli errori quando la memoria fisica disponibile è sufficiente per allocare la pagina, potrebbe essere dovuta a un Resource Governor disabilitato. Quando Resource Governor è disabilitato MEMORYBROKER_FOR_RESERVE genera richieste di memoria artificiali.

Per risolvere questo problema, è necessario abilitare Resource Governor.

Per informazioni sui limiti e sulle restrizioni e per istruzioni sull'abilitazione di Resource Governor usando Esplora oggetti, proprietà di Resource Governor o Transact-SQL, vedere Abilitare Resource Governor .

Vedere anche

Gestione della memoria per OLTP in memoria
Monitorare e risolvere i problemi relativi all'utilizzo della memoria
a un pool di risorse, vedere l'argomento
Procedure consigliate: uso di In-Memory OLTP in un ambiente vm