해시 버킷의 평균 행 체인 길이

Microsoft.SQLServer.Windows.Monitor.DBFilegroupFx.HashIndexAvgChainLength (UnitMonitor)

이 모니터는 SQL Database의 해시 인덱스 빈 버킷 수 및 평균 행 체인 길이를 확인합니다.

Knowledge Base article:

요약

이 모니터는 이 데이터베이스의 테이블에 대한 해시 버킷의 평균 행 체인 길이를 확인합니다. 이 모니터는 전체 표준 요구 사항에 포함되므로 설정이 지정된 표준과 맞지 않으면 경고가 발생합니다.

구성

인덱스는 SQL Server 테이블에서 효율적인 데이터 액세스를 위해 사용됩니다. 적절한 인덱스를 지정하면 쿼리 성능이 대폭 개선될 수 있습니다. empty_bucket_percent가 빈 버킷 백분율 임계값보다 크고, avg_chain_length가 평균 체인 길이 임계값보다 크고, 중복된 항목이 너무 많은 경우 모니터가 경고 알림을 발생시킵니다. 이 경우 NONCLUSTERED 인덱스를 사용하는 것이 더 적절합니다.

외부

자세한 정보는 다음을 참조하세요.

메모리 액세스에 최적화된 테이블의 인덱스

재정의 가능한 매개 변수

이름

설명

기본값

경고 우선 순위

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

보통

경고 심각도

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

경고

평균 체인 길이 임계값

해시 버킷의 평균 행 체인 길이를 나타내는 평균 체인 길이의 임계값입니다.

100

표시 인덱스 수

모범 사례에 따라 구성되지 않은 인덱스의 표시 수입니다.

5

빈 버킷 백분율 임계값

해시 인덱스의 빈 버킷 수를 나타내는 빈 버킷 백분율의 임계값입니다.

10

사용

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

알림 생성

워크플로에서 알림을 생성하는지 여부를 정의합니다.

간격(초)

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

43200

동기화 시간

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

 

시간 제한(초)

여기서 지정한 시간 동안 워크플로가 실행된 후 워크플로가 닫히고 실패로 표시됩니다.

300

데이터베이스 연결 시간 제한(초)

워크플로는 지정된 기간 동안 데이터베이스에 액세스할 수 없으면 실패하며 이벤트를 등록합니다.

15

Element properties:

TargetMicrosoft.SQLServer.Windows.DBFilegroupFx
Parent MonitorSystem.Health.ConfigurationState
CategoryConfigurationHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.Windows.MonitorType.DBFilegroupFx.HashIndexAvgChainLength
RemotableTrue
AccessibilityPublic
Alert Message
Windows의 MSSQL: 해시 버킷의 평균 행 체인 길이 오류
컴퓨터 "{2}"에서 SQL 인스턴스 "{1}"의 데이터베이스 "{0}"에 들어 있는 테이블에 중복된 항목이 너무 많은 인덱스가 포함되어 있으며, NONCLUSTERED 인덱스를 사용하는 것이 더 적절합니다. {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.DBFilegroupFx.HashIndexAvgChainLength" Accessibility="Public" Enabled="true" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBFilegroupFx" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.MonitorType.DBFilegroupFx.HashIndexAvgChainLength" ConfirmDelivery="false">
<Category>ConfigurationHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.Monitor.DBFilegroupFx.HashIndexAvgChainLength.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='Status']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Host/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<MonitoringType>$Target/Host/Host/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<DatabaseName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.Database"]/DatabaseName$</DatabaseName>
<IntervalSeconds>43200</IntervalSeconds>
<SyncTime/>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<EmptyBucketPercentThreshold>10</EmptyBucketPercentThreshold>
<AvgChainLengthThreshold>100</AvgChainLengthThreshold>
<ErrorTopLines>5</ErrorTopLines>
</Configuration>
</UnitMonitor>