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.
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.
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:
Il parametro Limite di memoria totale non è impostato correttamente nel file di configurazione
La memoria totale usata da altri processi e il limite preimpostato per SSAS superano il 100%
È 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 2016 è 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.
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:
Aumentare la memoria fisica disponibile sul computer server.
Diminuire l'utilizzo di memoria da parte delle istanze di SSAS o delle istanze del database relazionale modificando la progettazione dopo aver consultato la Guida alle prestazioni multidimensionali di SSAS o aver contattato il supporto tecnico Microsoft.
Diminuire l'utilizzo di memoria da parte degli altri processi tramite misure specifiche da adottare caso per caso o terminando i processi non necessari nel server.
Pianificare i processi o i report sulle istanze interessate in modo da evitare un carico di lavoro simultaneo nei periodi in cui si prevede un'allocazione eccessiva della memoria del server.
Ottimizzare le soglie configurate per l'avviso in modo da evitare tale condizione.
Disabilitare completamente il monitoraggio se l'utilizzo di memoria non rappresenta un problema per il server.
Considerazioni sulla configurazione della memoria e sul dimensionamento in SQL Server 2016
Documentazione TechNet per le proprietà della memoria di Analysis Services
Configurare le proprietà del server in Analysis Services
Documentazione TechNet per i contatori delle prestazioni di SSAS
Guida alle prestazioni multidimensionali di SSAS
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 | 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 | 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 |
Target | Microsoft.SQLServer.2016.AnalysisServices.Instance | ||
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.2016.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.MemoryUsageByOtherProcess" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.MemoryUsageByOtherProcessPercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.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>