Utilizzo di memoria nel server

Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess (UnitMonitor)

Il monitoraggio osserva l'utilizzo di memoria da parte dei processi non Analysis Services nel server in modo da garantire che sia sempre disponibile il limite di memoria totale per Analysis Services.

Knowledge Base article:

Riepilogo

L'utilizzo di memoria nel server che ospita l'istanza di SSAS può influire sull'integrità e le prestazioni del server entrando in conflitto per le risorse condivise da cui anche l'istanza deve effettuare le allocazioni. Tale condizione può portare all'esaurimento della memoria fisica disponibile sul computer, il che può forzare il sistema operativo a mappare la memoria virtuale al file di paging su disco, con ordini di grandezza più lenti rispetto alla memoria fisica. Per tutte le applicazioni aziendali critiche dipendenti da un'istanza di SSAS, il server deve essere configurato in modo tale che gli altri processi, ad esempio antivirus, deframmentazione del disco, altre istanze di SSAS o il motore di database relazionale di SQL Server e così via, non allochino troppa memoria causando tale situazione.

Cause

Tra i processi più comuni che entrano i conflitto in maniera significativa con le istanze di SSAS per l'acquisizione della memoria ci sono soprattutto le altre istanze di SSAS, il motore di database relazionale di SQL Server o gli altri server di database, poiché tali processi tendono a utilizzare la maggior parte della memoria ospitata sui server in cui è ospitato anche SSAS. Ovviamente, anche un programma software diverso dai database può talvolta utilizzare una quantità eccessiva di memoria. Per tale motivo, le considerazioni sulla memoria possono influire spesso sulla configurazione di un server.

Inoltre, il valore della memoria disponibile non riservata (parametro FreeUnreservedPercent) può diventare negativo. Questo parametro viene calcolato come segue: 100% della memoria totale meno l'utilizzo elevato di memoria da parte dell'istanza (SSAS) e meno l'utilizzo di memoria da parte di altri processi. I motivi possono essere:

È possibile usare Gestione attività per esaminare l'utilizzo di memoria da parte dei vari processi presenti nel server. Nella scheda Processi in Windows Server 2008 R2 e nella scheda Dettagli in Windows Server 2008 è possibile ordinare i processi in base alla colonna Memoria in modo da trovare i processi che utilizzano la maggior parte della memoria del sistema. Se le istanze di SSAS (msmdsrv.exe) o il motore di database relazionale di SQL Server (sqlservr.exe) stanno utilizzando una quantità eccessiva di memoria, in questo modo viene subito rilevato e naturalmente è possibile vedere anche se gli altri processi del sistema stanno contribuendo a determinare questa condizione. Successivamente, sarà possibile intraprendere le dovute azioni correttive come ad esempio ottimizzare l'utilizzo della memoria delle istanze con interventi mirati eseguiti dall'amministratore di SQL, aggiungere hardware o ridurre/dividere il carico di lavoro nel computer.

Soluzioni

Per risolvere i problemi di utilizzo totale del server, è necessario che gli amministratori comprendano e valutino diversi fattori tra cui i requisiti del carico di lavoro, le pianificazioni di processi e utenti, gli altri processi pianificati sul computer server e le risorse disponibili. Per risolvere le allocazioni eccessive di memoria totale sul computer server, è possibile intraprendere una delle azioni seguenti:

Risorse esterne

Documentazione TechNet per le proprietà della memoria di Analysis Services

Configurare le proprietà del server in Analysis Services

Guida alle prestazioni multidimensionali di SSAS

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Soglia critica (%)

Lo stato di integrità passa a Critico quando la memoria disponibile non riservata (%) scende sotto la soglia.

5

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.

900

Numero di campioni

Lo stato di integrità cambia se il numero di violazioni di soglia è superiore o uguale al numero minimo di violazioni.

4

Ora di sincronizzazione

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

 

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

300

Soglia avviso (%)

Lo stato di integrità passa ad Avviso quando la memoria disponibile non riservata (%) scende sotto la soglia ma rimane comunque superiore alla soglia critica (%).

10

Element properties:

TargetMicrosoft.SQLServer.2008.AnalysisServices.Instance
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2008: altri processi hanno allocato troppa memoria
La quantità di memoria stabilita dall'impostazione Limite di memoria totale potrebbe non essere disponibile per SSAS perché altri processi hanno allocato troppa memoria ({4} GB).
Memoria totale nel server: {2} GB
Utilizzo memoria totale: {5} GB
Memoria usata dai processi non SSAS: {4} GB
Memoria usata da SSAS: {3} GB
Limite di memoria SSAS minimo: {6} GB ({7}\%)
Limite di memoria SSAS massimo: {0} GB ({8}\%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2008.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='MemoryLimitHighGB']$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MemoryLeavesForOsGB']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='TotalPhysicalMemoryGB']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='MemoryUsageGB']$</AlertParameter4>
<AlertParameter5>$Data/Context/Property[@Name='MemoryUsageByOtherProcessGB']$</AlertParameter5>
<AlertParameter6>$Data/Context/Property[@Name='UsedPhysicalMemoryGB']$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='MemoryLimitLowGB']$</AlertParameter7>
<AlertParameter8>$Data/Context/Property[@Name='MemoryLimitLowPercent']$</AlertParameter8>
<AlertParameter9>$Data/Context/Property[@Name='MemoryLimitHighPercent']$</AlertParameter9>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Error" MonitorTypeStateID="Below" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Between" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Above" HealthState="Success"/>
</OperationalStates>
<Configuration>
<WarningThreshold>10</WarningThreshold>
<CriticalThreshold>5</CriticalThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>