서버에서 실행 중인 SQL Server 관계형 데이터베이스 엔진 프로세스가 있고 SSAS 인스턴스의 전체 메모리 한도 구성이 지정된 임계값보다 높은 경우 SQL 서버 프로세스의 메모리가 충분한지 확인하도록 모니터가 알림을 제공합니다.
컴퓨터의 다른 프로세스에 대한 메모리 할당이 충족되도록 SQL Server Analysis Services 전체 메모리 한도 구성 설정이 적절하게 조정되어야 합니다.
특히 SQL Server 관계형 데이터베이스 엔진은 SSAS도 실행하는 컴퓨터에서 메모리 리소스를 사용할 수 있는 일반적인 프로세스의 대표적인 예로, 이 상황에서는 동일한 고정 리소스의 두 주요 소비자가 실제 메모리를 두고 경쟁할 수 있습니다. 이 경우 서로의 충분한 실제 메모리를 사용하여 각각 필수 기능을 수행할 수 있도록 두 데이터베이스 서비스를 구성해야 합니다. SSAS 전체 메모리 한도가 너무 높게 구성되면 관계형 데이터베이스 엔진 또는 실제로 많은 메모리를 사용하는 다른 프로세스와 경쟁하기 때문에 SSAS가 과도한 메모리를 사용하여 실제 메모리가 소모될 수 있습니다. 전체 메모리 한도는 SQL Server의 구성 메모리 사용에도 허용되고 운영 체제 및 컴퓨터에 필수인 다른 일반 프로세스 메모리 사용에도 허용될 여유가 있도록 충분히 낮게 구성해야 합니다.
메모리 구성 충돌이 발생하는 경우 관리자는 리소스와 사용자 및 기타 프로세스의 수요에 가중치를 지정한 다음, 그에 따라 모든 관련 프로세스의 구성을 조정해야 합니다. Microsoft 데이터베이스 서버에서 이 유형의 문제에 대한 가장 일반적인 시나리오는 SSAS 및 SQL Server 관계형 데이터베이스 엔진의 인스턴스에서 발생합니다. 다행히 두 서비스 모두 필요에 따라 조정할 수 있는 구성 설정을 갖추고 있습니다. 보편적으로 올바른 SSAS의 전체 메모리 한도 설정 또는 SQL 관계형 데이터베이스 엔진의 최대 메모리 한도 설정은 없으므로 관리자가 각각 해당 환경에 맞게 이 알림의 임계값을 조정할 수 있습니다. 조정을 실행하는 경우 다음과 같이 여러 가능한 접근 방식을 통해 상태를 완화할 수 있습니다.
SQL Server 인스턴스 최대 메모리 한도 설정을 조정하여 해당 프로세스의 사용을 줄입니다.
SSAS 인스턴스 전체 메모리 한도 구성 설정을 낮춰 해당 프로세스의 사용을 줄입니다.
서버에서 사용할 수 있는 메모리를 늘립니다.
알림의 임계값을 조정합니다.
관리자가 필요하지 않다고 판단할 경우 알림을 사용하지 않도록 설정합니다.
SQL Server 2016의 메모리 구성 및 크기 조정 고려 사항
Analysis Services 메모리 속성 TechNet 설명서
이름 | 설명 | 기본값 |
사용 | 워크플로를 사용하거나 사용하지 않도록 설정합니다. | 예 |
알림 생성 | 워크플로의 알림 생성 여부 정의 | 예 |
간격(초) | 워크플로를 실행하는 반복 시간 간격(초)입니다. | 604800 |
동기화 시간 | 24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다. |
|
경고 임계값(%) | 서버에서 실행 중인 SQL Server 관계형 데이터베이스 엔진 프로세스가 있고 SSAS 인스턴스의 전체 메모리 한도 구성 설정이 임계값을 초과하는 경우 상태가 변경됩니다. | 40 |
시간 제한(초) | 워크플로를 닫고 실패로 표시하기 전에 워크플로를 실행할 수 있는 시간을 지정합니다. | 300 |
Target | Microsoft.SQLServer.2016.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.2016.AnalysisServices.MonitorType.Instance.ConfigurationConflictWithSQLServer | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>