SQL Server와 메모리 구성 충돌

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

서버에서 실행 중인 SQL Server 관계형 데이터베이스 엔진 프로세스가 있고 SSAS 인스턴스의 전체 메모리 한도 구성이 지정된 임계값보다 높은 경우 SQL 서버 프로세스의 메모리가 충분한지 확인하도록 모니터가 알림을 제공합니다.

Knowledge Base article:

요약

컴퓨터의 다른 프로세스에 대한 메모리 할당이 충족되도록 SQL Server Analysis Services 전체 메모리 한도 구성 설정이 적절하게 조정되어야 합니다.

원인

특히 SQL Server 관계형 데이터베이스 엔진은 SSAS도 실행하는 컴퓨터에서 메모리 리소스를 사용할 수 있는 일반적인 프로세스의 대표적인 예로, 이 상황에서는 동일한 고정 리소스의 두 주요 소비자가 실제 메모리를 두고 경쟁할 수 있습니다. 이 경우 서로의 충분한 실제 메모리를 사용하여 각각 필수 기능을 수행할 수 있도록 두 데이터베이스 서비스를 구성해야 합니다. SSAS 전체 메모리 한도가 너무 높게 구성되면 관계형 데이터베이스 엔진 또는 실제로 많은 메모리를 사용하는 다른 프로세스와 경쟁하기 때문에 SSAS가 과도한 메모리를 사용하여 실제 메모리가 소모될 수 있습니다. 전체 메모리 한도는 SQL Server의 구성 메모리 사용에도 허용되고 운영 체제 및 컴퓨터에 필수인 다른 일반 프로세스 메모리 사용에도 허용될 여유가 있도록 충분히 낮게 구성해야 합니다.

해결 방법

메모리 구성 충돌이 발생하는 경우 관리자는 리소스와 사용자 및 기타 프로세스의 수요에 가중치를 지정한 다음, 그에 따라 모든 관련 프로세스의 구성을 조정해야 합니다. Microsoft 데이터베이스 서버에서 이 유형의 문제에 대한 가장 일반적인 시나리오는 SSAS 및 SQL Server 관계형 데이터베이스 엔진의 인스턴스에서 발생합니다. 다행히 두 서비스 모두 필요에 따라 조정할 수 있는 구성 설정을 갖추고 있습니다. 보편적으로 올바른 SSAS의 전체 메모리 한도 설정 또는 SQL 관계형 데이터베이스 엔진의 최대 메모리 한도 설정은 없으므로 관리자가 각각 해당 환경에 맞게 이 알림의 임계값을 조정할 수 있습니다. 조정을 실행하는 경우 다음과 같이 여러 가능한 접근 방식을 통해 상태를 완화할 수 있습니다.

외부 리소스

SQL Server 2016의 메모리 구성 및 크기 조정 고려 사항

Analysis Services 메모리 속성 TechNet 설명서

Analysis Services 서버 속성 구성

SSAS 성능 카운터 TechNet 설명서

SSAS 다차원 성능 가이드

재정의 가능한 매개 변수

이름

설명

기본값

사용

워크플로를 사용하거나 사용하지 않도록 설정합니다.

알림 생성

워크플로의 알림 생성 여부 정의

간격(초)

워크플로를 실행하는 반복 시간 간격(초)입니다.

604800

동기화 시간

24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다.

 

경고 임계값(%)

서버에서 실행 중인 SQL Server 관계형 데이터베이스 엔진 프로세스가 있고 SSAS 인스턴스의 전체 메모리 한도 구성 설정이 임계값을 초과하는 경우 상태가 변경됩니다.

40

시간 제한(초)

워크플로를 닫고 실패로 표시하기 전에 워크플로를 실행할 수 있는 시간을 지정합니다.

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: SQL Server와 메모리 구성 충돌
SQL Server Analysis Services 인스턴스 전체 메모리 한도 구성 설정({0}GB)에는 운영 체제 및 알림에 대해 구성된 임계값 미만인 SQL Server에 대해 {2}GB 중 {1}GB가 남아 있습니다.
서버의 전체 메모리: {2}GB
전체 메모리 사용량: {5}GB
SSAS 이외의 프로세스에서 사용 중인 메모리: {4}GB
SSAS에서 사용 중인 메모리: {3}GB
SSAS 메모리 하한: {6}GB({7}\%)
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>