Utilizzo di memoria del pool di risorse

Microsoft.SQLServer.2016.Monitor.UserResourcePool.MemoryConsumption (UnitMonitor)

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.

Knowledge Base article:

Riepilogo

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 ottimizzazione per la memoria tiene traccia della memoria allocata a tutte le tabelle con ottimizzazione per la memoria, comprese le tabelle interne usate per diverse strutture all'interno del motore di dati con ottimizzazione per la memoria.

Cause

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.

Soluzioni

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:

Risorse esterne

Gestione della memoria per i dati con ottimizzazione per la memoria

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Priorità avviso

Definisce la priorità dell'avviso.

Normale

Gravità avviso

Definisce la gravità dell'avviso.

Errore

Abilitato

Abilita o disabilita il flusso di lavoro.

Genera avvisi

Definisce se il flusso di lavoro genera un avviso.

Intervallo (secondi)

Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro.

300

Numero di campioni

Indica quante volte un valore misurato deve violare una soglia prima che venga modificato lo stato.

6

Ritardo script (millisecondi)

Questo parametro imposta il ritardo tra le query T-SQL consecutive eseguite dal flusso di lavoro. Favorisce la riduzione del footprint generato dal flusso di lavoro in presenza di un numero elevato di oggetti di destinazione. Prima di cambiare questo parametro, consultare il Supporto tecnico Microsoft.

0

Ora di sincronizzazione

Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa.

00:07

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.

180

Element properties:

TargetMicrosoft.SQLServer.2016.UserResourcePool
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.MonitorType.UserResourcePool.MemoryConsumption
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: Dati con ottimizzazione per la memoria: il pool di risorse usa troppa memoria.
Il pool di risorse "{0}" usa troppa memoria.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.Monitor.UserResourcePool.MemoryConsumption" Target="SQL2016Core!Microsoft.SQLServer.2016.UserResourcePool" ParentMonitorID="SystemHealth!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.2016.MonitorType.UserResourcePool.MemoryConsumption" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Monitor.UserResourcePool.MemoryConsumption.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ResourcePool"]/Name$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="ErrorState" MonitorTypeStateID="ErrorState" HealthState="Error"/>
<OperationalState ID="SuccessState" MonitorTypeStateID="SuccessState" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<ServerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</SqlInstanceName>
<Value>$Data/Property[@Name='PoolUsedMemoryPercent']$</Value>
<PoolID>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ResourcePool"]/PoolID$</PoolID>
<Threshold>90</Threshold>
<TimeoutSeconds>180</TimeoutSeconds>
<ScriptDelayMsec>0</ScriptDelayMsec>
<NumSamples>6</NumSamples>
</Configuration>
</UnitMonitor>