SSAS 인스턴스별 메모리 할당이 SSAS 인스턴스의 전체 메모리 한도 설정 비율로 표현되는, 구성된 경고 임계값을 초과할 경우 모니터가 경고를 보고합니다. 할당이 구성된 위험 임계값을 초과할 경우 모니터가 중요한 알림을 발급합니다.
SSAS 인스턴스별 메모리 할당이 SSAS 인스턴스의 전체 메모리 한도 설정 비율로 표현되는, 구성된 경고 임계값을 초과할 경우 모니터가 경고를 보고합니다. 할당이 구성된 위험 임계값을 초과할 경우 모니터가 중요한 알림을 발급합니다.
일부 상황에서는 SSAS가 전체 메모리 한도 설정에 근접하거나 초과할 수 있습니다. 일부 경우에는 하나의 작업에 이러한 한도를 넘는 메모리가 필요하며 긴급하지 않은 다른 태스크의 메모리를 지우기 위해 서버가 최선을 다함에도 불구하고 할당이 구성된 한도를 초과하거나 강제로 작업이 수행되지 않도록 해야 할 수 있습니다.
큰 차원 또는 팩트 데이터를 처리하는 경우 특히, 긴 문자열, 이진 데이터 등과 같이 많은 공간을 사용하는 데이터 형식의 특성이 있거나 차원에 여러 멤버가 포함되어 있는 경우에 발생할 수 있습니다. 또한 여러 차원이 크로스 조인되어 있는 경우 또는 현명한 관리자가 이전에 집계하지 않았거나 간단히 미리 집계할 수 없는 셀의 결과를 도출하기 위해 중요한 계산이 필요한 경우 서버에서 실행되는 쿼리가 매우 많은 공간을 사용할 수 있습니다.
서버의 메모리 한도를 초과하는 경우 관리자가 문제를 수정하는 데 사용할 수 있는 접근 방식은 여러 가지가 있습니다. 메모리 사용을 발생시킨 기본 작업, 서버의 작업 요구 사항, 사용 가능한 리소스 및 다른 요인을 고려하고 SSAS 다차원 성능 가이드도 철저하게 검토하고 고려하며 필요에 따라 Microsoft 지원에 문의한 후 다음 접근 방식 중 하나를 사용하여 문제를 해결할 수 있습니다.
가장 중요한 메모리 할당이 발생한 세션을 식별하고 수동으로 종료합니다.
가장 중요한 메모리 할당이 발생한 세션을 식별하고 처리 작업 또는 보고서를 다시 예약하거나 사용률이 낮은 시간 동안 캐시 워밍 쿼리로 사전 할당을 하거나 특정 집계가 처리 중 작성되도록 미리 디자인하여 이후 사용자 쿼리의 메모리 사용을 줄이는 방법으로 문제를 사례별로 해결합니다.
호스트 컴퓨터의 실제 메모리를 늘립니다.
호스트 컴퓨터에서 SQL Server 관계형 데이터베이스 엔진 인스턴스 또는 다른 SSAS 인스턴스와 같은 다른 프로세스의 메모리 사용량을 줄입니다.
이러한 상태가 발생하지 않도록 알림에 대해 구성된 임계값 또는 전체 메모리 한도를 늘립니다.
서버에서 메모리 사용량이 별로 중요하지 않을 경우 모니터를 완전히 사용하지 않도록 설정합니다.
SQL Server 2016의 메모리 구성 및 크기 조정 고려 사항
Analysis Services 메모리 속성 TechNet 설명서
이름 | 설명 | 기본값 |
위험 임계값(%) | Analysis Services 메모리 사용량(%)이 임계값을 초과하는 경우 상태가 위험으로 변경됩니다. | 95 |
사용 | 워크플로를 사용하거나 사용하지 않도록 설정합니다. | 예 |
알림 생성 | 워크플로의 알림 생성 여부 정의 | 예 |
간격(초) | 워크플로를 실행하는 반복 시간 간격(초)입니다. | 900 |
샘플 수 | 임계값 위반 수가 최소 위반 수 이상인 경우 상태가 변경됩니다. | 4 |
동기화 시간 | 24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다. |
|
시간 제한(초) | 워크플로를 닫고 실패로 표시하기 전에 워크플로를 실행할 수 있는 시간을 지정합니다. | 300 |
경고 임계값(%) | Analysis Services 메모리 사용량(%)이 임계값을 초과했으나 위험 임계값(%)보다는 낮은 경우 상태가 경고로 변경됩니다. | 80 |
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.MemoryUsagePercent | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.MemoryUsage" 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.MemoryUsagePercent" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.AnalysisServices.UnitMonitor.Instance.MemoryUsage.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="Critical" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Success" HealthState="Success"/>
</OperationalStates>
<Configuration>
<CriticalThreshold>95</CriticalThreshold>
<WarningThreshold>80</WarningThreshold>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>