Risolvere i problemi di memoria insufficienteResolve Out Of Memory Issues

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2014)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

OLTP in memoria di SQL ServerSQL Server In-Memory OLTP usa più memoria e in modi diversi rispetto a SQL ServerSQL Server.. È possibile che la quantità di memoria installata e allocata per OLTP in memoriaIn-Memory OLTP diventi inadeguata con l'aumentare delle esigenze.It is possible that the amount of memory you installed and allocated for OLTP in memoriaIn-Memory OLTP becomes inadequate for your growing needs. In tal caso, è possibile che la memoria risulti insufficiente.If so, you could run out of memory. In questo argomento viene descritto come risolvere una situazione di memoria insufficiente.This topic covers how to recover from an OOM situation. Per le linee guida che consentono di evitare molte situazioni di memoria insufficiente, vedere Monitorare e risolvere i problemi relativi all'utilizzo della memoria .See Monitor and Troubleshoot Memory Usage for guidance that can help you avoid many OOM situations.

Sezioni dell'argomentoCovered in this topic

ArgomentoTopic PanoramicaOverview
Risoluzione degli errori di ripristino del database dovuti a memoria insufficienteResolve database restore failures due to OOM Operazioni da eseguire se viene visualizzato il messaggio di errore "Operazione di ripristino non riuscita per il database '<NomeDatabase>'. Memoria insufficiente nel pool di risorse '<NomePoolRisorse>'."What to do if you get the error message, “Restore operation failed for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'.”
Risoluzione dell'impatto delle condizioni di memoria insufficiente sul carico di lavoroResolve impact of low memory or OOM conditions on the workload Operazioni da eseguire nel caso in cui i problemi di memoria insufficiente incidono negativamente sulle prestazioni.What to do if you find low memory issues are negatively impacting performance.
Risoluzione degli errori di allocazione della pagina dovuti a memoria insufficiente quando è disponibile memoria sufficienteResolve page allocation failures due to insufficient memory when sufficient memory is available Operazioni da eseguire se viene visualizzato il messaggio di errore "È in corso la disabilitazione delle allocazioni di pagine per il database '<NomeDatabase>'. Memoria insufficiente nel pool di risorse <NomePoolRisorse>'.What to do if you get the error message, “Disallowing page allocations for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'. …"…” quando è disponibile memoria sufficiente per l'operazione.when available memory is sufficient for the operation.

Risoluzione degli errori di ripristino del database dovuti a memoria insufficiente Resolve database restore failures due to OOM

Quando si prova a ripristinare un database, è possibile che venga visualizzato il messaggio di errore "L'operazione di ripristino non è riuscita per il database '<NomeDatabase>'. Memoria insufficiente nel pool di risorse <NomePoolRisorse>'." Questo errore indica che la memoria disponibile del server non è sufficiente per il ripristino del database.When you attempt to restore a database you may get the error message: “Restore operation failed for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'.” This indicates that the server does not have enough available memory for restoring the database.

La memoria disponibile del server in cui viene ripristinato un database deve essere sufficiente per le tabelle con ottimizzazione per la memoria nel backup del database, in caso contrario il database non verrà portato online.The server you restore a database to must have enough available memory for the memory-optimized tables in the database backup, otherwise the database will not come online.

Se la memoria fisica del server è sufficiente, ma viene comunque visualizzato questo errore, altri processi potrebbero star usando troppa memoria oppure un problema di configurazione rende la memoria disponibile insufficiente per il ripristino.If the server does have enough physical memory, but you are still seeing this error, it could be that other processes are using too much memory or a configuration issue causes not enough memory to be available for restore. Per questo tipo di problemi usare le seguenti misure per aumentare la memoria disponibile per l'operazione di ripristino:For this class of issues, use the following measures to make more memory available to the restore operation:

  • Chiudere temporaneamente le applicazioni in esecuzione.Temporarily close running applications.
    Chiudendo una o più applicazioni in esecuzione o arrestando i servizi non necessari al momento, si libera la memoria usata da tali applicazioni rendendola disponibile per l'operazione di ripristino.By closing one or more running applications or stopping services not needed at the moment, you make the memory they were using available for the restore operation. È possibile riavviarle dopo il completamento del ripristino.You can restart them following the successful restore.

  • Aumentare il valore di MAX_MEMORY_PERCENT.Increase the value of MAX_MEMORY_PERCENT.
    Se il database è associato a un pool di risorse, che rappresenta la procedura consigliata, la memoria disponibile per il ripristino viene regolata da MAX_MEMORY_PERCENT.If the database is bound to a resource pool, which is best practice, the memory available to restore is governed by MAX_MEMORY_PERCENT. Se il valore è troppo basso, il ripristino non riuscirà.If the value is too low, restore will fail. Nel frammento di codice seguente il valore di MAX_MEMORY_PERCENT per il pool di risorse PoolHk viene modificato al 70% della memoria installata.This code snippet changes MAX_MEMORY_PERCENT for the resource pool PoolHk to 70% of installed memory.

    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.If the server is running on a VM and is not dedicated, set the value of MIN_MEMORY_PERCENT to the same value as MAX_MEMORY_PERCENT.
    Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM .See the topic Best Practices: Using In-Memory OLTP in a VM environment for more information.

    
    -- 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 con ottimizzazione per la memoria.For information on maximum values for MAX_MEMORY_PERCENT see the topic section Percent of memory available for memory-optimized tables and indexes.

  • Aumentare max server memory.Increase 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.For information on configuring max server memory see the topic Optimizing Server Performance Using Memory Configuration Options.

Risoluzione dell'impatto delle condizioni di memoria insufficiente sul carico di lavoro Resolve impact of low memory or OOM conditions on the workload

Ovviamente, è consigliabile non trovarsi in una situazione di memoria insufficiente.Obviously, it is best to not get into a low memory or OOM (Out of Memory) situation. Una buona pianificazione e un buon monitoraggio consentono di evitare le situazioni di memoria insufficiente.Good planning and monitoring can help avoid OOM situations. Tuttavia, nonostante l'accurata pianificazione non sempre è possibile prevedere le effettive esigenze e potrebbero verificarsi situazioni di memoria insufficiente.Still, the best planning does not always foresee what actually happens and you might end up with low memory or OOM. Sono disponibili due passaggi per risolvere una situazione di memoria insufficiente:There are two steps to recovering from OOM:

  1. Aprire una connessione amministrativa dedicata (DAC)Open a DAC (Dedicated Administrator Connection)

  2. Intraprendere un'azione correttivaTake corrective action

Aprire una connessione amministrativa dedicata (DAC) Open a DAC (Dedicated Administrator Connection)

Microsoft SQL Server fornisce una connessione amministrativa dedicata (DAC).Microsoft SQL Server provides a dedicated administrator connection (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 sul server, anche quando il server non risponde ad altre connessioni client.The DAC allows an administrator to access a running instance of SQL Server Database Engine to troubleshoot problems on the server—even when the server is unresponsive to other client connections. La connessione DAC è disponibile tramite l'utilità sqlcmd e SQL Server Management Studio (SSMS).The DAC is available through the sqlcmd utility and SQL Server Management Studio (SSMS).

Per informazioni sull'uso di sqlcmd e della connessione DAC, vedere Utilizzo di una connessione amministrativa dedicata.For guidance on using sqlcmd and DAC see Using a Dedicated Administrator Connection. Per informazioni sull'uso della connessione DAC tramite SSMS, vedere Procedura: Utilizzo della connessione amministrativa dedicata con SQL Server Management Studio.For guidance on using DAC through SSMS see How to: Use the Dedicated Administrator Connection with SQL Server Management Studio.

Intraprendere un'azione correttiva Take corrective action

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.To resolve your OOM condition you need to either free up existing memory by reducing usage, or make more memory available to your in-memory tables.

Liberare memoria esistenteFree up existing memory

Eliminare le righe non essenziali delle tabelle con ottimizzazione per la memoria e attendere la procedura di Garbage CollectionDelete non-essential memory optimized table rows and wait for garbage collection

È possibile rimuovere le righe non essenziali da una tabella con ottimizzazione per la memoria.You can remove non-essential rows from a memory optimized table. Il Garbage Collector restituisce la memoria usata da queste righe alla memoria disponibile.The garbage collector returns the memory used by these rows to available memory. .. Il motore OLTP in memoria raccoglie rapidamente le righe di Garbage Collection.In-memory OLTP engine collects garbage rows aggressively. Tuttavia, una transazione con esecuzione prolungata può impedire il processo di Garbage Collection.However, a long running transaction can prevent garbage collection. Ad esempio, se si dispone di una transazione che viene eseguita per 5 minuti, tutte le versioni di riga create a causa delle operazioni di aggiornamento/eliminazione mentre la transazione è attiva non possono essere sottoposte al processo di Garbage Collection.For example, if you have a transaction that runs for 5 minutes, any row versions created due to update/delete operations while the transaction was active can’t be garbage collected.

Spostare una o più righe in una tabella basata su discoMove one or more rows to a disk-based table

Gli articoli di Technet riportati di seguito offrono istruzioni sullo spostamento di righe da una tabella con ottimizzazione per la memoria a una tabella basata su disco.The following TechNet articles provide guidance on moving rows from a memory-optimized table to a disk-based table.

Aumentare la memoria disponibileIncrease available memory

Aumentare il valore di MAX_MEMORY_PERCENT nel pool di risorseIncrease value of MAX_MEMORY_PERCENT on the resource pool

Se non è stato creato un pool di risorse denominato per le tabelle in memoria, è consigliabile eseguire tale operazione e associare al pool i database di OLTP in memoriaIn-Memory OLTP .If you have not created a named resource pool for your in-memory tables you should do that and bind your OLTP in memoriaIn-Memory OLTP databases to it. Per istruzioni sulla creazione e l'associazione dei database a un pool di risorse, vedere l'argomento Associazione di un database con tabelle con ottimizzazione per la memoria a un pool di risorse OLTP in memoriaIn-Memory OLTP .See the topic Bind a Database with Memory-Optimized Tables to a Resource Pool for guidance on creating and binding your OLTP in memoriaIn-Memory OLTP databases to a resource pool.

Se il database di OLTP in memoriaIn-Memory OLTP è associato a un pool di risorse, è possibile aumentare la percentuale di memoria a cui il pool può accedere.If your OLTP in memoriaIn-Memory OLTP database is bound to a resource pool you may be able to increase the percent of memory the pool can access. 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 .See the sub-topic Change MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT on an existing pool for guidance on changing the value of MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT for a resource pool.

Aumentare il valore di MAX_MEMORY_PERCENT.Increase the value of 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.This code snippet changes MAX_MEMORY_PERCENT for the resource pool PoolHk to 70% of installed memory.

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.If the server is running on a VM and is not dedicated, set the value of MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value.
Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM .See the topic Best Practices: Using In-Memory OLTP in a VM environment for more information.


-- 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 con ottimizzazione per la memoria.For information on maximum values for MAX_MEMORY_PERCENT see the topic section Percent of memory available for memory-optimized tables and indexes.

Installare memoria aggiuntivaInstall additional memory

Infine, la soluzione migliore, se possibile, prevede l'installazione di ulteriore memoria fisica.Ultimately the best solution, if possible, is to install additional physical memory. In questo caso, tenere presente che probabilmente sarà possibile aumentare anche il valore di MAX_MEMORY_PERCENT (vedere l'argomento secondario Cambiare MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT in un pool esistente) poiché SQL ServerSQL Server potrebbe non richiedere ulteriore memoria, consentendo di rendere disponibile la maggior parte se non tutta la memoria appena installata per il pool di risorse.If you do this, remember that you will probably be able to also increase the value of MAX_MEMORY_PERCENT (see the sub-topic Change MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT on an existing pool) since SQL ServerSQL Server won’t likely need more memory, allowing you to make most if not all of the newly installed memory available to the resource pool.

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.If the server is running on a VM and is not dedicated, set the value of MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value.
Per altre informazioni, vedere l'argomento Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM .See the topic Best Practices: Using In-Memory OLTP in a VM environment for more information.

Risoluzione degli errori di allocazione della pagina dovuti a memoria insufficiente quando è disponibile memoria sufficiente Resolve page allocation failures due to insufficient memory when sufficient memory is available

Se viene visualizzato il messaggio di errore "È in corso la disabilitazione delle allocazioni di pagine per il database '<NomeDatabase>'. Memoria insufficiente nel pool di risorse '<NomePoolRisorse>'.If you get the error message, “Disallowing page allocations for database '<databaseName>' due to insufficient memory in the resource pool '<resourcePoolName>'. Per altre informazioni, vedere 'http://go.microsoft.com/fwlink/?LinkId=330673'See 'http://go.microsoft.com/fwlink/?LinkId=330673' for more information.” nel log degli errori quando la memoria fisica disponibile è sufficiente per allocare pagina, il problema può essere dovuto a Resource Governor disabilitato.in the error log when the available physical memory is sufficient to allocate the page, it may be due to a disabled Resource Governor. Quando Resource Governor è disabilitato MEMORYBROKER_FOR_RESERVE genera richieste di memoria artificiali.When the Resource Governor is disabled MEMORYBROKER_FOR_RESERVE induces artificial memory pressure.

Per risolvere questo problema, è necessario abilitare Resource Governor.To resolve this you need to enable the 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 .See Enable Resource Governor for information on Limits and Restrictions as well as guidance on enabling Resource Governor using Object Explorer, Resource Governor properties, or Transact-SQL.

Vedere ancheSee Also

Gestione della memoria per OLTP in memoria Managing Memory for In-Memory OLTP
Monitorare e risolvere i problemi relativi all'utilizzo della memoria Monitor and Troubleshoot Memory Usage
a un pool di risorse, vedere l'argomento Bind a Database with Memory-Optimized Tables to a Resource Pool
Procedure consigliate: Uso di OLTP in memoria in un ambiente di VM Best Practices: Using In-Memory OLTP in a VM environment