Il monitoraggio segnala uno stato Critico e genera un avviso quando la quantità di memoria usata dal pool di risorse è maggiore dell'impostazione della soglia, espressa come percentuale della memoria disponibile per le tabelle dati con ottimizzazione per la memoria per il pool di risorse specifico.
Il monitoraggio segnala uno stato Critico e genera un avviso quando la quantità di memoria usata dal pool di risorse è maggiore dell'impostazione della soglia, espressa come percentuale della memoria disponibile per le tabelle dati con ottimizzazione per la memoria per il pool di risorse specifico.
Il pool di risorse denominato quando viene mappato a un database con tabelle ottimizzate per la memoria tiene traccia della memoria allocata a tutte le tabelle ottimizzate per la memoria, comprese le tabelle interne usate per diverse strutture all'interno del motore di dati ottimizzati per la memoria.
I dati con ottimizzazione per la memoria di SQL Server usano più memoria e in maniera diversa rispetto a SQL Server. È possibile che la quantità di memoria installata e allocata per i dati con ottimizzazione per la memoria diventi insufficiente per soddisfare le esigenze crescenti. In tal caso, potrebbero verificarsi problemi a causa della memoria esaurita.
Per informazioni dettagliate, vedere l'articolo seguente: Associazione di un database con tabelle con ottimizzazione per la memoria a un pool di risorse.
Per risolvere la condizione di memoria insufficiente o esaurita, è necessario liberare parte della memoria esistente riducendone l'uso o rendere disponibile più memoria alle tabelle dati con ottimizzazione per la memoria. Le possibili azioni correttive possono includere:
Controllare se una transazione a lunga esecuzione sta impedendo il processo di Garbage Collection della memoria. In tal caso, provare a terminare la transazione a lunga esecuzione e/o esaminare la progettazione dell'applicazione per vedere se è possibile ridurre la durata delle transazioni.
Liberare parte della memoria esistente.
Eliminare le righe delle tabelle con ottimizzazione per la memoria non essenziali e attendere l'esecuzione dell'operazione di Garbage Collection.
Spostare una o più righe in una tabella basata su disco.
Aumentare il valore di MAX_MEMORY_PERCENT nel pool di risorse.
Aumentare la memoria disponibile per l'istanza di SQL Server configurando un valore più alto per Memoria massima del server.
Installare altra memoria.
Gestione della memoria per i dati con ottimizzazione per la memoria
Nome | Descrizione | Valore predefinito |
Priorità avviso | Definisce la priorità dell'avviso. | Normale |
Gravità avviso | Definisce la gravità dell'avviso. | Errore |
Attivato | Abilita o disabilita il flusso di lavoro. | Sì |
Genera avvisi | Definisce se il flusso di lavoro genera un avviso. | Sì |
Intervallo (secondi) | Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro. | 900 |
Numero di campioni | Indica quante volte un valore misurato deve violare una soglia prima che venga modificato lo stato. | 6 |
Tempo di sincronizzazione | Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa. |
|
Soglia | Il valore raccolto verrà confrontato con questo parametro. | 90 |
Timeout (secondi) | Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito. | 300 |
Timeout per la connessione di database (secondi) | Il flusso di lavoro avrà esito negativo e registrerà un evento se non riesce ad accedere al database durante il periodo specificato. | 15 |
Target | Microsoft.SQLServer.Windows.UserResourcePool | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.Windows.MonitorType.UserResourcePool.MemoryConsumption | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.UserResourcePool.MemoryConsumption" Target="SqlDiscW!Microsoft.SQLServer.Windows.UserResourcePool" ParentMonitorID="Health!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.Windows.MonitorType.UserResourcePool.MemoryConsumption" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.Monitor.UserResourcePool.MemoryConsumption.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.ResourcePool"]/Name$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="ErrorState" MonitorTypeStateID="ErrorState" HealthState="Error"/>
<OperationalState ID="SuccessState" MonitorTypeStateID="SuccessState" HealthState="Success"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Host/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<Threshold>90</Threshold>
<NumSamples>6</NumSamples>
<PoolName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.ResourcePool"]/Name$</PoolName>
</Configuration>
</UnitMonitor>