메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 사용 가능한 공간

Microsoft.SQLServer.2016.Monitor.Container.FreeSpacePercent (UnitMonitor)

메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너의 사용 가능한 디스크 공간이 메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 크기 및 사용 가능한 디스크 공간의 합계 비율로 표현되는 경고 임계값 설정 아래로 떨어질 경우 모니터가 경고를 보고합니다. 사용 가능한 공간이 위험 임계값 아래로 떨어질 경우 모니터가 중요한 알림을 보고합니다.

Knowledge Base article:

요약

메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너의 사용 가능한 디스크 공간이 메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 크기 및 사용 가능한 디스크 공간의 합계 비율로 표현되는 경고 임계값 설정 아래로 떨어질 경우 모니터가 경고를 보고합니다. 사용 가능한 공간이 위험 임계값 아래로 떨어질 경우 모니터가 중요한 알림을 보고합니다.

메모리 액세스에 최적화된 데이터 테이블에 더 많은 데이터가 추가되므로 메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 폴더는 일반적으로 시간이 갈수록 커집니다. 따라서 관리자는 컨테이너 폴더의 저장소 위치에 충분한 공간이 남아 있는지 확인하기 위해 모니터링을 하려고 합니다.

원인

데이터베이스 저장소 위치가 구성되어 있는 드라이브의 사용 가능한 디스크 공간이 너무 부족한 경우 오류가 발생하여 데이터를 처리할 수 없거나, 사용자 쿼리가 지연되거나, 동일한 디스크 공간 할당을 공유하는 다른 응용 프로그램에 영향을 미칠 수 있습니다.

저장소는 지속형 메모리 액세스에 최적화된 테이블에서 DML 작업의 일부로 할당됩니다. 저장소는 지속형 메모리 액세스에 최적화된 테이블 메모리 액세스에 최적화된 데이터 크기의 최대 4배로 구성해야 합니다. 저장소를 올바르게 구성했으나 사용 가능한 저장소 공간이 적은 상태로 계속 실행할 경우 컨테이너에서 지원되는 IOPS가 작업 요구를 지원하지 못할 수 있습니다. 일반적으로 컨테이너는 데이터/델타 파일의 초기 채우기 및 원본 데이터/델타 파일을 읽은 다음 대상 CFP에 병합해야 하는 자동 병합 작업을 처리하도록 데이터 생성 속도의 3배 IOPS를 지원하는 것이 좋습니다.

해결 방법

사용 가능한 디스크 공간 부족에 대한 해결 방법은 근본 원인에 따라 다르므로 이 문제가 발생하는 사례마다 근본 원인을 조사해야 합니다. 다음과 같이 여러 가능한 접근 방식을 통해 상태를 완화할 수 있습니다.

재정의 가능한 매개 변수

이름

설명

기본값

알림 우선 순위

알림 우선 순위를 정의합니다.

보통

알림 심각도

알림 심각도를 정의합니다.

오류

위험 임계값

값이 이 임계값 아래로 떨어지면 모니터의 상태가 '위험'으로 변경됩니다.

10

사용

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

알림 생성

워크플로가 알림을 생성하는지를 정의합니다.

간격(초)

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

900

스크립트 지연(밀리초)

이 매개 변수는 워크플로에서 실행되는 연속 T-SQL 쿼리 사이의 지연을 설정합니다. 대상 개체 수가 많은 경우 워크플로가 생성하는 사용 공간을 줄이는 데 도움이 될 수 있습니다. 이 매개 변수를 변경하려면 먼저 Microsoft 지원에 문의하십시오.

0

동기화 시간

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

 

제한 시간(초)

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

300

경고 임계값

값이 이 임계값 아래로 떨어지면 모니터의 상태가 '경고'로 변경됩니다.

20

Element properties:

TargetMicrosoft.SQLServer.2016.Container
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.MonitorType.Container.FreeSpacePercent
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: 메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너의 사용 가능한 공간이 부족함
사용 가능한 공간의 {7}\%만 "{5}" 드라이브의 메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 "{0}"에 사용할 수 있습니다. 이 값은 알림에 대해 구성된 임계값보다 작습니다.
서버: {4}
SQL Server 인스턴스: {3}
데이터베이스: {2}
파일 그룹: {1}
컨테이너: {0}
드라이브(탑재 지점): {5}
디스크 크기: {6}MB
메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 사용 가능한 공간: {8}MB({7}\%)
메모리 액세스에 최적화된 데이터 파일 그룹 컨테이너 크기: {9}MB
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.Monitor.Container.FreeSpacePercent" Target="SQL2016Core!Microsoft.SQLServer.2016.Container" ParentMonitorID="SystemHealth!System.Health.PerformanceState" TypeID="Microsoft.SQLServer.2016.MonitorType.Container.FreeSpacePercent" Accessibility="Public" Enabled="true" Remotable="true" Priority="Normal" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Monitor.Container.FreeSpacePercent.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Container"]/ContainerName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.FileGroup"]/GroupName$</AlertParameter2>
<AlertParameter3>$Target/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Database"]/DatabaseName$</AlertParameter3>
<AlertParameter4>$Target/Host/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</AlertParameter4>
<AlertParameter5>$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter5>
<AlertParameter6>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Container"]/ContainerStorage$</AlertParameter6>
<AlertParameter7>$Data/Context/Property[@Name='DriveTotalSizeMB']$</AlertParameter7>
<AlertParameter8>$Data/Context/Property[@Name='FreeSpacePercent']$</AlertParameter8>
<AlertParameter9>$Data/Context/Property[@Name='FreeSpaceSpaceMB']$</AlertParameter9>
<AlertParameter10>$Data/Context/Property[@Name='AllocatedSizeMB']$</AlertParameter10>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Critical" MonitorTypeStateID="ContainerFreeSpaceCritical" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="ContainerFreeSpaceWarning" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="ContainerFreeSpaceSuccess" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<ConnectionString>$Target/Host/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ConnectionString$</ConnectionString>
<ServerName>$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</SqlInstanceName>
<DatabaseName>$Target/Host/Host/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Database"]/DatabaseName$</DatabaseName>
<DBFileId>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.Container"]/ContainerID$</DBFileId>
<Value>Property[@Name='FreeSpacePercent']</Value>
<CriticalThreshold>10</CriticalThreshold>
<WarningThreshold>20</WarningThreshold>
<TimeoutSeconds>300</TimeoutSeconds>
<ScriptDelayMsec>0</ScriptDelayMsec>
</Configuration>
</UnitMonitor>