Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 OLTP in memoria diventi inadeguata con l'aumentare delle esigenze. In tal caso, è possibile che la memoria risulti insufficiente. In questo argomento viene illustrato come recuperare da una situazione di memoria insufficiente (OOM). Per le linee guida che consentono di evitare molte situazioni di memoria insufficiente, vedere Monitorare e risolvere i problemi relativi all'utilizzo della memoria .
Cosa è coperto in questo argomento
| Argomento | Informazioni generali |
|---|---|
| Risolvi i fallimenti di ripristino del database dovuti a esaurimento della memoria | 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>'." |
| Risolvere l'impatto della bassa memoria o delle condizioni OOM 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 | Operazioni da eseguire se viene visualizzato il messaggio di errore "Allocazioni di pagine non consentite per il database '<NomeDatabase>' a causa di memoria insufficiente nel pool di risorse '<NomePoolRisorse>'. ..." quando la memoria disponibile è sufficiente per l'operazione. |
Risolvere i fallimenti di ripristino del database dovuti a OOM
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 il fallimento del ripristino dovuto a OOM (Out Of Memory), aumentare la memoria disponibile utilizzando uno o tutti questi metodi per incrementare temporaneamente la memoria disponibile per l'operazione di ripristino.
Chiudere temporaneamente le applicazioni in esecuzione.
Chiudendo una o più applicazioni in esecuzione, ad esempio Visual Studio, Internet Explorer, OneNote e altri, si rende disponibile la memoria usata 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 GOPer informazioni sui valori massimi per MAX_MEMORY_PERCENT vedere la sezione Percentuale di memoria disponibile per tabelle e indici ottimizzati per la memoria
Riconfigurare il numero massimo di memoria del server.
Per informazioni sulla configurazione della memoria massima del server , 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 o OOM (Out of Memory). Una buona pianificazione e un attento monitoraggio possono aiutare a evitare le situazioni di memoria insufficiente. Tuttavia, anche la migliore pianificazione non sempre prevede cosa accade effettivamente e si potrebbe finire con memoria bassa o situazione di Out of Memory (OOM). Ci sono due passaggi per recuperare da una situazione di memoria insufficiente (OOM):
Aprire una connessione amministrativa dedicata (DAC)
Microsoft SQL Server fornisce una connessione amministrativa dedicata. 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. Il DAC è disponibile tramite l'utilità sqlcmd e SQL Server Management Studio (SSMS).
Per indicazioni sull'uso di sqlcmd e DAC, vedere Uso di una Connessione Amministratore Dedicata. Per indicazioni sull'uso della Connessione Amministrativa Dedicata tramite SSMS, vedere Usare la 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 ottimizzate per la memoria e attendere la raccolta automatica dei rifiuti.
È 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 elimina in modo aggressivo le righe obsolete. Tuttavia, una transazione a lungo termine può impedire la 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, è consigliabile eseguire tale operazione e associare al pool i database di OLTP in memoria. Per istruzioni sulla creazione e l'associazione dei database OLTP in memoria a un pool di risorse, vedi l'argomento Associazione di un database con tabelle con ottimizzazione per la memoria a un pool di risorse.
Se il database di OLTP in memoria è associato a un pool di risorse, è possibile aumentare la percentuale di memoria a cui il pool può accedere. 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. In questo caso, tieni presente che probabilmente sarà possibile aumentare anche il valore di MAX_MEMORY_PERCENT (vedi l'argomento Modificare il valore di MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT in un pool esistente) poiché SQL Server potrebbe non necessitare di ulteriore memoria, consentendo di rendere disponibile la maggior parte se non tutta la memoria appena installata 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 "Non consentire allocazioni di pagine per il database '<databaseName>' a causa di memoria insufficiente nel pool di risorse '<resourcePoolName>'. Per ulteriori informazioni, vedere "https://go.microsoft.com/fwlink/?LinkId=330673" nel registro degli errori quando la memoria fisica disponibile è sufficiente per allocare la pagina, potrebbe essere dovuto a un Resource Governor disabilitato. Quando Resource Governor è disabilitato, MEMORYBROKER_FOR_RESERVE induce una pressione artificiale sulla memoria.
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
Associare un database con tabelle con ottimizzazione per la memoria a un pool di risorse
Procedure consigliate: uso di In-Memory OLTP in un ambiente di macchine virtuali