Conflicto de configuración de memoria con SQL Server

Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer (UnitMonitor)

El monitor genera una alerta si se está ejecutando un proceso de motor de base de datos relacional de SQL Server en el servidor y la configuración del límite de memoria total para la instancia de SSAS es superior al umbral especificado, a fin de garantizar que el proceso de SQL Server tenga suficiente memoria.

Knowledge Base article:

Resumen

El valor de configuración del límite de memoria total de SQL Server Analysis Services se debe ajustar correspondientemente para que admita asignaciones de memoria para otros procesos del equipo.

Causas

El motor de base de datos relacional de SQL Server en particular es un ejemplo principal de un proceso común que puede consumir recursos de memoria en un equipo que también ejecute SSAS y, en estas circunstancias, puede provocar una competición por la memoria física por parte de ambos consumidores masivos del mismo recurso fijo. Esto requiere que ambos servicios de base de datos se configuren para compartir suficiente memoria física para llevar a cabo las funciones requeridas. Si el valor configurado del límite de memoria total de SSAS es demasiado elevado, puede que SSAS consuma demasiada memoria y se agote la memoria física debido a la competición con el motor de base de datos relacional (o con otros procesos que también consuman mucha memoria). El límite de memoria total se debe configurar suficientemente bajo para permitir el consumo de memoria configurado de SQL Server más un margen para el consumo de memoria del sistema operativo y otros procesos típicos que es esencial para el equipo.

Soluciones

Cuando se producen conflictos de configuración de memoria, el administrador debe evaluar los recursos y las demandas de los usuarios y otros procesos y ajustar la configuración de todos los procesos relevantes como corresponda. El escenario más común para este tipo de problema en un servidor de bases de datos de Microsoft procede de las instancias de SSAS y del motor de base de datos relacional de SQL Server. Afortunadamente, ambos servicios cuentan con opciones de configuración de características que se pueden ajustar según sea necesario. No hay ninguna opción de configuración de límite de memoria total para SSAS ni de límite de memoria máximo para el motor de base de datos relacional de SQL universalmente correcta, de modo que el administrador puede ajustar el umbral de esta alerta para adaptarlo a cada entorno específico. Una vez detectada, existen varios métodos posibles que pueden paliar esta situación:

Externo

Configuración de la memoria y consideraciones del tamaño en SQL Server 2016

Documentación de TechNet para las propiedades de memoria de Analysis Services

Configurar las propiedades del servidor en Analysis Services

Documentación de TechNet para los contadores de rendimiento de SSAS

Guía sobre rendimiento multidimensional de SSAS

Parámetros invalidables

Nombre

Descripción

Valor predeterminado

Habilitado

Habilita o deshabilita el flujo de trabajo

Genera alertas

Define si el flujo de trabajo genera una alerta

Intervalo (segundos)

Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo.

604800

Hora de sincronización

Hora de sincronización especificada en un formato de 24 horas. Se puede omitir.

 

Umbral de advertencia (%)

El estado cambia si se está ejecutando un proceso de motor de base de datos relacional de SQL Server en el servidor y la configuración del límite de la memoria total para la instancia de SSAS es superior al umbral.

40

Tiempo de espera (segundos)

Especifica el tiempo durante el que se puede ejecutar el flujo de trabajo antes de que se cierre y se marque como error.

300

Element properties:

TargetMicrosoft.SQLServer.2016.AnalysisServices.Instance
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: conflicto de configuración de memoria con SQL Server
La configuración de Límite de memoria total de la instancia de SQL Server Analysis Services ({0} GB) deja {1} GB de {2} GB para el sistema operativo y SQL Server, un valor inferior al umbral configurado para la alerta.
Memoria total del servidor: {2} GB
Uso total de memoria: {5} GB
Memoria que usan procesos independientes de SSAS: {4} GB
Memoria que usa SSAS: {3} GB
Límite inferior de memoria de SSAS: {6} GB ({7} \%)
Límite superior de memoria de SSAS: {0} GB ({8} \%)
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.ConfigurationConflictWithSQLServer" Accessibility="Public" Enabled="true" Target="SQLAS!Microsoft.SQLServer.2016.AnalysisServices.Instance" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.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/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>