전체 메모리 한도 구성

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

SSAS 인스턴스에 대해 구성된 전체 메모리 한도가 구성된 임계값을 초과하여 운영 체제가 필수 기본 기능을 수행하는 데 필요한 2GB 이상의 실제 메모리 할당이 위험해지는 경우 모니터가 알림을 제공합니다.

Knowledge Base article:

요약

SSAS 인스턴스에 대해 구성된 전체 메모리 한도가 구성된 임계값을 초과하여 운영 체제가 필수 기본 기능을 수행하는 데 필요한 실제 메모리 할당이 위험해지는 경우 모니터가 알림을 제공합니다. 또한 구성은 모니터되는 특정 인스턴스 이외 프로세스의 잠재적 메모리 사용을 고려하지 않으므로 관리자가 SSAS 다차원 성능 가이드를 철저히 검토한 후 전체 메모리 한도 설정을 조정할 때 이 점에 대해서도 고려해야 합니다.

원인

전체 메모리 한도는 적어도 운영 체제가 메모리 관리의 기본 필수 기능과 드라이버 및 하드웨어 상호 작용을 수행하기에 충분한 공간을 허용해야 합니다. OS에 이러한 필수 기능에 사용할 수 있는 메모리가 부족한 경우 시스템 불안정이나 오류가 발생할 수 있습니다. 따라서 이러한 기능이 충분한 실제 메모리를 사용할 수 있도록 이 설정은 100% 약간 아래로 구성되어야 합니다. 너무 높게 설정되는 경우 이 모니터가 해당 상태를 알려 경고합니다.

전체 메모리 한도에 대한 SSAS의 기본 구성은 80이며, 서버에서 실제 메모리의 80%를 사용할 수 있음을 나타냅니다. 메모리를 많이 사용하는 다른 소비자(예: SQL Server 관계형 데이터베이스 엔진)가 있는 경우 해당 소비자도 고려하여 메모리 한도 설정을 적절하게 낮춰야 합니다. 숫자를 너무 높게 올리면 OS에 실제 메모리가 부족할 수 있으며 디스크 페이징이 많아져 서버의 성능이 효율적이지 않게 될 수 있습니다.

특정 바이트 수가 필요한 경우 100보다 큰 값은 실제 메모리의 바이트 수로 해석됩니다.

참고: SSAS 엔진 전체 메모리 한도는 절대적 최대 메모리 제한을 지원하는 SQL Server 관계형 데이터베이스 엔진과 약간 다르게 작동합니다. 전체 메모리 한도는 서버가 가능한 한 빨리 메모리를 지우려고 적극적으로 시도하기 시작하는 한도입니다. 마찬가지로 메모리 하한은 서버가 이미 진행 중인 기존 세션 또는 쿼리에 미치는 영향을 줄이기 위해 "천천히" SSAS 캐시에서 메모리를 지우려고 시도하기 시작하는 한도입니다. 전체 메모리 한도에 도달하는 경우 서버가 매우 적극적으로 캐시에서 메모리를 지우므로 서버 성능에 영향을 미칠 수 있습니다. 서버는 또한 서버가 메모리를 늘리기 위해 임의로 세션을 종료하기 시작하는 지점인 하드 메모리 제한 설정도 지원합니다. 이로 인해 일부 사용자에게 오류가 발생할 수 있으며 이것이 전체 메모리 한도를 절대적 제한으로 강제 적용하지 않는 이유입니다. 일부 쿼리 또는 작업은 본질적으로 메모리를 매우 집중적으로 사용하기 때문입니다. OLAP 엔진은 지원하도록 구성된 한도 내에서 메모리를 제공하는 데 최선을 다합니다.

해결 방법

다음 조치 중 하나를 사용하여 이러한 상태를 해결할 수 있습니다.

외부 리소스

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

Analysis Services 메모리 속성 TechNet 설명서

Analysis Services 서버 속성 구성

SSAS 성능 카운터 TechNet 설명서

SSAS 다차원 성능 가이드

재정의 가능한 매개 변수

이름

설명

기본값

사용

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

알림 생성

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

간격(초)

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

604800

동기화 시간

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

 

경고 임계값(GB)

SSAS 인스턴스에 대해 구성된 전체 메모리 한도가 구성된 임계값을 초과하여 운영 체제가 필수 기본 기능을 수행하는 데 필요한 2GB 이상의 실제 메모리 할당이 위험해지는 경우 모니터가 알림을 제공합니다.

2

시간 제한(초)

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

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.TotalMemoryConfiguration
RemotableTrue
AccessibilityPublic
Alert Message
SSAS 2016: 잘못된 전체 메모리 한도 구성
SSAS 인스턴스에 대해 구성된 전체 메모리 한도({0}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.TotalMemoryConfiguration" 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.TotalMemoryConfiguration" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.TotalMemoryConfiguration.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="NotConfigured" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Configured" HealthState="Success"/>
</OperationalStates>
<Configuration>
<Threshold>2</Threshold>
<IntervalSeconds>604800</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>