Il monitoraggio avvisa se nel server è in esecuzione un processo del motore di database relazionale di SQL Server e se la configurazione di TotalMemoryLimit per l'istanza di SSAS è superiore alla soglia specificata in modo da garantire che il processo di SQL Server disponga di memoria sufficiente.
L'impostazione di configurazione di TotalMemoryLimit per SQL Server Analysis Services deve essere modificata di conseguenza in modo da contenere le allocazioni di memoria per gli altri processi del computer.
In particolare, il motore di database relazionale di SQL Server rappresenta un esempio principale di un normale processo che può utilizzare risorse di memoria in un computer che esegue anche SSAS, e in tale circostanza può verificarsi un conflitto per l'acquisizione di memoria fisica in quanto entrambi i componenti utilizzano gran parte della stessa risorsa fissa. In tale condizione è necessario configurare entrambi i servizi di database in modo da consentire a entrambi di utilizzare la memoria fisica sufficiente per poter eseguire le relative funzioni necessarie. Se per TotalMemoryLimit di SSAS è stato configurato un valore troppo alto, SSAS potrebbe utilizzare una quantità eccessiva di memoria, determinando l'esaurimento della memoria fisica, a causa del conflitto con il motore di database relazionale (o anche con altri processi che richiedono di fatto un elevato utilizzo di memoria). È consigliabile quindi configurare per TotalMemoryLimit un valore sufficientemente basso in modo da consentire l'utilizzo di memoria configurato di SQL Server, oltre a un margine per il sistema operativo e per altri processi tipici necessari nel computer.
Quando si verificano conflitti di configurazione della memoria, è necessario che un amministratori valuti le risorse e le richieste degli utenti oltre agli altri processi e che quindi modifichi di conseguenza la configurazione di tutti i processi rilevanti. Lo scenario più comune di questo tipo di problema in un server di database Microsoft è rappresentato dalle istanze di SSAS e del motore di database relazionale di SQL Server. Fortunatamente, entrambi i servizi includono impostazioni di configurazione che possono essere modificate a seconda delle necessità. Non esiste un'impostazione di TotalMemoryLimit universalmente corretta per SSAS né un'impostazione del limite di memoria massimo per il motore di database relazionale di SQL Server, pertanto la soglia di questo avviso può essere modificata dall'amministratore per includere ogni ambiente specifico. Quando si verifica questo conflitto, è possibile provare a risolvere tale condizione adottando uno dei tanti approcci potenziali:
Modificare l'impostazione del limite di memoria massimo per le istanze di SQL Server in modo da ridurne l'utilizzo da parte di tali processi.
Ridurre l'impostazione di configurazione di TotalMemoryLimit per le istanze di SSAS in modo da ridurne l'utilizzo da parte di tali processi.
Aumentare la memoria disponibile nel server.
Modificare la soglia per l'avviso.
Disabilitare l'avviso per i casi in cui non sia ritenuto necessario da un amministratore.
Documentazione TechNet per le proprietà della memoria di Analysis Services
Configurare le proprietà del server in Analysis Services
Guida alle prestazioni multidimensionali di SSAS
Nome | Descrizione | Valore predefinito |
Abilitato | Abilita o disabilita il flusso di lavoro | True |
Genera avvisi | Definisce se il flusso di lavoro genera un avviso | True |
Intervallo (secondi) | Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro. | 604800 |
Ora di sincronizzazione | Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa. |
|
Soglia avviso (%) | Lo stato di integrità cambia se nel server è in esecuzione un processo del motore di database relazionale di SQL Server e se l'impostazione di configurazione di TotalMemoryLimit per l'istanza di SSAS supera la soglia. | 40 |
Target | Microsoft.SQLServer.2008.AnalysisServices.Instance | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | ConfigurationHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2008.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</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="Warning" MonitorTypeStateID="ConfigurationConflict" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="NoConfigurationConflict" HealthState="Success"/>
</OperationalStates>
<Configuration>
<Threshold>40</Threshold>
<IntervalSeconds>604800</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>