리소스 풀에 사용된 메모리 양이 지정된 리소스 풀의 메모리 액세스에 최적화된 데이터 테이블에 사용 가능한 메모리 비율로 표현되는 임계값 설정보다 큰 경우 모니터가 위험 상태를 보고하고 알림을 발생시킵니다.
리소스 풀에 사용된 메모리 양이 지정된 리소스 풀의 메모리 액세스에 최적화된 데이터 테이블에 사용 가능한 메모리 비율로 표현되는 임계값 설정보다 큰 경우 모니터가 위험 상태를 보고하고 알림을 발생시킵니다.
메모리 액세스에 최적화된 데이터베이스에 매핑되는 경우 명명된 리소스 풀은 메모리 액세스에 최적화된 데이터 엔진에 있는 여러 구조에 사용되는 내부 테이블을 포함하여 모든 메모리 액세스에 최적화된 테이블에 할당된 메모리를 추적합니다.
SQL Server 메모리 액세스에 최적화된 데이터는 SQL Server보다 더 많은 메모리를 SQL Server와 다른 방식으로 사용합니다. 메모리 액세스에 최적화된 데이터를 위해 설치하고 할당한 메모리 양이 증가하는 요구를 충족시키기에 부족할 수 있습니다. 이 경우 메모리가 부족해질 수 있습니다.
자세한 내용은 다음 문서를 참조하세요. 메모리 액세스에 최적화된 테이블이 있는 데이터베이스를 리소스 풀에 바인딩
메모리 부족 또는 메모리 부족 상태를 해결하려면 사용량을 줄여 기존 메모리를 확보하거나, 더 많은 메모리를 메모리 액세스에 최적화된 데이터 테이블에 사용할 수 있게 해야 합니다. 가능한 수정 조치는 다음과 같습니다.
메모리의 가비지를 수집하지 못하도록 하는 장기 실행 트랜잭션이 있는지 확인합니다. 있는 경우 장기 실행 트랜잭션을 중지하는 것을 고려하거나 응용 프로그램 디자인를 살펴보고 트랜잭션 기간을 줄일 수 있는지 확인합니다.
기존 메모리를 확보합니다.
불필요한 메모리 액세스에 최적화된 테이블 행을 삭제하고 가비지 수집을 대기합니다.
하나 이상의 행을 디스크 기반 테이블로 이동합니다.
리소스 풀의 MAX_MEMORY_PERCENT 값을 늘립니다.
최대 서버 메모리를 더 높은 값으로 구성하여 SQL Server 인스턴스에 사용 가능한 메모리를 늘립니다.
추가 메모리를 설치합니다.
이름 | 설명 | 기본값 |
알림 우선 순위 | 알림 우선 순위를 정의합니다. | 보통 |
알림 심각도 | 알림 심각도를 정의합니다. | 오류 |
사용 | 워크플로를 사용하거나 사용하지 않도록 설정합니다. | 예 |
알림 생성 | 워크플로가 알림을 생성하는지를 정의합니다. | 예 |
간격(초) | 워크플로를 실행하는 반복 시간 간격(초)입니다. | 300 |
샘플 수 | 상태가 변경되기 전 측정된 값이 임계값을 위반한 횟수를 나타냅니다. | 6 |
스크립트 지연(밀리초) | 이 매개 변수는 워크플로에서 실행되는 연속 T-SQL 쿼리 사이의 지연을 설정합니다. 대상 개체 수가 많은 경우 워크플로가 생성하는 사용 공간을 줄이는 데 도움이 될 수 있습니다. 이 매개 변수를 변경하려면 먼저 Microsoft 지원에 문의하십시오. | 0 |
동기화 시간 | 24시간 형식으로 지정된 동기화 시간입니다. 생략될 수 있습니다. | 00:07 |
임계값 | 수집된 값이 이 매개 변수와 비교됩니다. | 90 |
제한 시간(초) | 워크플로를 닫고 실패로 표시하기 전에 워크플로를 실행할 수 있는 시간을 지정합니다. | 180 |
Target | Microsoft.SQLServer.2016.UserResourcePool | ||
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.MonitorType.UserResourcePool.MemoryConsumption | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2016.Monitor.UserResourcePool.MemoryConsumption" Target="SQL2016Core!Microsoft.SQLServer.2016.UserResourcePool" ParentMonitorID="SystemHealth!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.2016.MonitorType.UserResourcePool.MemoryConsumption" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Monitor.UserResourcePool.MemoryConsumption.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ResourcePool"]/Name$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="ErrorState" MonitorTypeStateID="ErrorState" HealthState="Error"/>
<OperationalState ID="SuccessState" MonitorTypeStateID="SuccessState" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<ServerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</SqlInstanceName>
<Value>$Data/Property[@Name='PoolUsedMemoryPercent']$</Value>
<PoolID>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ResourcePool"]/PoolID$</PoolID>
<Threshold>90</Threshold>
<TimeoutSeconds>180</TimeoutSeconds>
<ScriptDelayMsec>0</ScriptDelayMsec>
<NumSamples>6</NumSamples>
</Configuration>
</UnitMonitor>