sys.dm_os_latch_stats(Transact-SQL)
클래스별로 구성된 모든 래치 대기에 대한 정보를 반환합니다.
열 이름 |
데이터 형식 |
설명 |
---|---|---|
latch_class |
nvarchar(120) |
래치 클래스의 이름입니다. |
waiting_requests_count |
bigint |
이 클래스의 래치 대기 수입니다. 이 카운터는 래치 대기가 시작될 때 증가합니다. |
wait_time_ms |
bigint |
이 클래스의 총 래치 대기 시간(밀리초)입니다.
참고
이 열은 래치 대기 동안 5분마다 업데이트되고 래치 대기가 끝날 때도 업데이트됩니다.
|
max_wait_time_ms |
bigint |
메모리 개체가 이 래치를 기다린 최대 시간입니다. 이 값이 지나치게 높으면 내부 교착 상태가 발생한 것일 수 있습니다. |
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
주의
sys.dm_os_latch_stats를 사용하면 여러 래치 클래스에 대한 상대적 대기 수와 대기 시간을 조사하여 래치 경합의 원인을 확인할 수 있습니다. 어떤 경우에는 래치 경합을 해결하거나 줄일 수 있습니다. 그러나 Microsoft 고객 지원 서비스에 연락해야 할 경우도 있습니다.
다음과 같이 DBCC SQLPERF를 사용하여 sys.dm_os_latch_stats의 내용을 다시 설정할 수 있습니다.
DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);
GO
이렇게 하면 모든 카운터가 0으로 다시 설정됩니다.
[!참고]
이러한 통계는 SQL Server를 다시 시작할 경우 지속되지 않습니다. 모든 데이터는 통계가 마지막으로 다시 설정된 이후나 SQL Server가 시작된 이후로 누적됩니다.
래치
래치는 다양한 SQL Server 구성 요소에서 사용하는 경량 동기화 개체이며 주로 데이터베이스 페이지 동기화에 사용됩니다. 각 래치는 단일 할당 단위와 연결되어 있습니다.
충돌 모드의 다른 스레드에서 래치를 보유하기 때문에 래치 요청에 즉시 권한을 부여할 수 없을 때 래치 대기가 발생합니다. 잠금과 달리 래치는 작업 후 즉시 해제되는데 이는 쓰기 작업에서도 마찬가지입니다.
래치는 구성 요소와 용도에 기반하여 클래스로 그룹화됩니다. SQL Server 인스턴스에는 언제든지 특정 클래스의 래치가 0개 이상 존재할 수 있습니다.
[!참고]
sys.dm_os_latch_stats는 즉시 권한이 부여되었거나 대기하지 않고 실패한 래치 요청을 추적하지 않습니다.
다음 표에서는 다양한 래치 클래스에 대한 간략한 설명을 제공합니다.
래치 클래스 |
설명 |
---|---|
ALLOC_CREATE_RINGBUF |
SQL Server에서 내부적으로 할당 링 버퍼 만들기의 동기화를 초기화하는 데 사용됩니다. |
ALLOC_CREATE_FREESPACE_CACHE |
힙에 대한 내부 사용 가능한 공간 캐시의 동기화를 초기화하는 데 사용됩니다. |
ALLOC_CACHE_MANAGER |
내부 일관성 테스트를 동기화하는 데 사용됩니다. |
ALLOC_FREESPACE_CACHE |
힙과 BLOB(Binary Large Object)에 대한 사용 가능한 공간이 있는 페이지의 캐시에 대한 액세스를 동기화하는 데 사용됩니다. 이 클래스의 래치에 대한 경합은 동시에 여러 연결이 힙이나 BLOB에 행을 삽입하려고 할 때 발생할 수 있습니다. 개체를 분할하여 이 경합을 줄일 수 있습니다. 각 분할에는 자체 래치가 있습니다. 분할하면 여러 래치에 삽입이 분산됩니다. |
ALLOC_EXTENT_CACHE |
할당되지 않는 페이지를 포함하는 익스텐트의 캐시에 대한 액세스를 동기화하는 데 사용됩니다. 이 클래스의 래치에 대한 경합은 동시에 여러 연결이 같은 할당 단위로 데이터 페이지를 할당하려고 할 때 발생할 수 있습니다. 이 할당 단위가 속한 개체를 분할하여 이 경합을 줄일 수 있습니다. |
ACCESS_METHODS_DATASET_PARENT |
병렬 작업 동안 상위 데이터 집합에 대한 하위 데이터 집합 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_HOBT_FACTORY |
내부 해시 테이블에 대한 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_HOBT |
HoBt의 메모리 내 표현에 대한 액세스를 제어하는 데 사용됩니다. |
ACCESS_METHODS_HOBT_COUNT |
HoBt 페이지 및 행 카운터에 대한 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_HOBT_VIRTUAL_ROOT |
내부 B-트리의 루트 페이지 추상화에 대한 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC |
작업 테이블 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_BULK_ALLOC |
대량 할당자 내의 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_SCAN_RANGE_GENERATOR |
병렬 검색 동안 범위 생성자에 대한 액세스를 동기화하는 데 사용됩니다. |
ACCESS_METHODS_KEY_RANGE_GENERATOR |
키 범위 병렬 검색 동안 미리 읽기 작업에 대한 액세스를 동기화하는 데 사용됩니다. |
APPEND_ONLY_STORAGE_INSERT_POINT |
빠른 추가 전용 저장 단위로 삽입을 동기화하는 데 사용됩니다. |
APPEND_ONLY_STORAGE_FIRST_ALLOC |
추가 전용 저장 단위의 첫 번째 할당을 동기화하는 데 사용됩니다. |
APPEND_ONLY_STORAGE_UNIT_MANAGER |
빠른 추가 전용 저장 단위 관리자 내의 내부 데이터 구조 액세스 동기화에 사용됩니다. |
APPEND_ONLY_STORAGE_MANAGER |
빠른 추가 전용 저장 단위 관리자에서 축소 작업을 동기화하는 데 사용됩니다. |
BACKUP_RESULT_SET |
병렬 백업 결과 집합을 동기화하는 데 사용됩니다. |
BACKUP_TAPE_POOL |
백업 테이프 풀을 동기화하는 데 사용됩니다. |
BACKUP_LOG_REDO |
백업 로그 다시 실행 작업을 동기화하는 데 사용됩니다. |
BACKUP_INSTANCE_ID |
백업 성능 모니터 카운터에 대한 인스턴스 ID 생성을 동기화하는 데 사용됩니다. |
BACKUP_MANAGER |
내부 백업 관리자를 동기화하는 데 사용됩니다. |
BACKUP_MANAGER_DIFFERENTIAL |
DBCC를 사용하여 차등 백업 작업을 동기화하는 데 사용됩니다. |
BACKUP_OPERATION |
데이터베이스, 로그 또는 파일 백업 같은 백업 작업 내의 내부 데이터 구조 동기화에 사용됩니다. |
BACKUP_FILE_HANDLE |
복원 작업 동안 파일 열기 작업을 동기화하는 데 사용됩니다. |
BUFFER |
데이터베이스 페이지에 대한 단기 액세스를 동기화하는 데 사용됩니다. 데이터베이스 페이지를 읽거나 수정하기 전에 버퍼 래치가 필요합니다. 버퍼 래치 경합은 핫 페이지와 느린 I/O를 비롯하여 여러 문제를 나타낼 수 있습니다. 이 래치 클래스는 페이지 래치의 가능한 모든 용도에 적용됩니다. sys.dm_os_wait_stats는 페이지에서 I/O 작업으로 인한 페이지 래치 대기와 읽기/쓰기 작업으로 인한 페이지 래치 대기를 구별합니다. |
BUFFER_POOL_GROW |
버퍼 풀 증가 작업 동안 내부 버퍼 관리자 동기화에 사용됩니다. |
DATABASE_CHECKPOINT |
데이터베이스 내의 검사점 직렬화에 사용됩니다. |
CLR_PROCEDURE_HASHTABLE |
내부적으로만 사용됩니다. |
CLR_UDX_STORE |
내부적으로만 사용됩니다. |
CLR_DATAT_ACCESS |
내부적으로만 사용됩니다. |
CLR_XVAR_PROXY_LIST |
내부적으로만 사용됩니다. |
DBCC_CHECK_AGGREGATE |
내부적으로만 사용됩니다. |
DBCC_CHECK_RESULTSET |
내부적으로만 사용됩니다. |
DBCC_CHECK_TABLE |
내부적으로만 사용됩니다. |
DBCC_CHECK_TABLE_INIT |
내부적으로만 사용됩니다. |
DBCC_CHECK_TRACE_LIST |
내부적으로만 사용됩니다. |
DBCC_FILE_CHECK_OBJECT |
내부적으로만 사용됩니다. |
DBCC_PERF |
내부 성능 모니터 카운터를 동기화하는 데 사용됩니다. |
DBCC_PFS_STATUS |
내부적으로만 사용됩니다. |
DBCC_OBJECT_METADATA |
내부적으로만 사용됩니다. |
DBCC_HASH_DLL |
내부적으로만 사용됩니다. |
EVENTING_CACHE |
내부적으로만 사용됩니다. |
FCB |
파일 제어 블록에 대한 액세스를 동기화하는 데 사용됩니다. |
FCB_REPLICA |
내부적으로만 사용됩니다. |
FGCB_ALLOC |
파일 그룹 내에서 라운드 로빈 할당 정보에 대한 액세스를 동기화하는 데 사용됩니다. |
FGCB_ADD_REMOVE |
ADD 및 DROP 파일 작업을 위해 파일 그룹에 대한 액세스를 동기화하는 데 사용됩니다. |
FILEGROUP_MANAGER |
내부적으로만 사용됩니다. |
FILE_MANAGER |
내부적으로만 사용됩니다. |
FILESTREAM_FCB |
내부적으로만 사용됩니다. |
FILESTREAM_FILE_MANAGER |
내부적으로만 사용됩니다. |
FILESTREAM_GHOST_FILES |
내부적으로만 사용됩니다. |
FILESTREAM_DFS_ROOT |
내부적으로만 사용됩니다. |
LOG_MANAGER |
내부적으로만 사용됩니다. |
FULLTEXT_DOCUMENT_ID |
내부적으로만 사용됩니다. |
FULLTEXT_DOCUMENT_ID_TRANSACTION |
내부적으로만 사용됩니다. |
FULLTEXT_DOCUMENT_ID_NOTIFY |
내부적으로만 사용됩니다. |
FULLTEXT_LOGS |
내부적으로만 사용됩니다. |
FULLTEXT_CRAWL_LOG |
내부적으로만 사용됩니다. |
FULLTEXT_ADMIN |
내부적으로만 사용됩니다. |
FULLTEXT_AMDIN_COMMAND_CACHE |
내부적으로만 사용됩니다. |
FULLTEXT_LANGUAGE_TABLE |
내부적으로만 사용됩니다. |
FULLTEXT_CRAWL_DM_LIST |
내부적으로만 사용됩니다. |
FULLTEXT_CRAWL_CATALOG |
내부적으로만 사용됩니다. |
FULLTEXT_FILE_MANAGER |
내부적으로만 사용됩니다. |
DATABASE_MIRRORING_REDO |
내부적으로만 사용됩니다. |
DATABASE_MIRRORING_SERVER |
내부적으로만 사용됩니다. |
DATABASE_MIRRORING_CONNECTION |
내부적으로만 사용됩니다. |
DATABASE_MIRRORING_STREAM |
내부적으로만 사용됩니다. |
QUERY_OPTIMIZER_VD_MANAGER |
내부적으로만 사용됩니다. |
QUERY_OPTIMIZER_ID_MANAGER |
내부적으로만 사용됩니다. |
QUERY_OPTIMIZER_VIEW_REP |
내부적으로만 사용됩니다. |
RECOVERY_BAD_PAGE_TABLE |
내부적으로만 사용됩니다. |
RECOVERY_MANAGER |
내부적으로만 사용됩니다. |
SECURITY_OPERATION_RULE_TABLE |
내부적으로만 사용됩니다. |
SECURITY_OBJPERM_CACHE |
내부적으로만 사용됩니다. |
SECURITY_CRYPTO |
내부적으로만 사용됩니다. |
SECURITY_KEY_RING |
내부적으로만 사용됩니다. |
SECURITY_KEY_LIST |
내부적으로만 사용됩니다. |
SERVICE_BROKER_CONNECTION_RECEIVE |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSMISSION |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSMISSION_UPDATE |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSMISSION_STATE |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSMISSION_ERRORS |
내부적으로만 사용됩니다. |
SSBXmitWork |
내부적으로만 사용됩니다. |
SERVICE_BROKER_MESSAGE_TRANSMISSION |
내부적으로만 사용됩니다. |
SERVICE_BROKER_MAP_MANAGER |
내부적으로만 사용됩니다. |
SERVICE_BROKER_HOST_NAME |
내부적으로만 사용됩니다. |
SERVICE_BROKER_READ_CACHE |
내부적으로만 사용됩니다. |
SERVICE_BROKER_WAITFOR_MANAGER |
내부적으로만 사용됩니다. |
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA |
내부적으로만 사용됩니다. |
SERVICE_BROKER_TRANSPORT |
내부적으로만 사용됩니다. |
SERVICE_BROKER_MIRROR_ROUTE |
내부적으로만 사용됩니다. |
TRACE_ID |
내부적으로만 사용됩니다. |
TRACE_AUDIT_ID |
내부적으로만 사용됩니다. |
TRACE |
내부적으로만 사용됩니다. |
TRACE_CONTROLLER |
내부적으로만 사용됩니다. |
TRACE_EVENT_QUEUE |
내부적으로만 사용됩니다. |
TRANSACTION_DISTRIBUTED_MARK |
내부적으로만 사용됩니다. |
TRANSACTION_OUTCOME |
내부적으로만 사용됩니다. |
NESTING_TRANSACTION_READONLY |
내부적으로만 사용됩니다. |
NESTING_TRANSACTION_FULL |
내부적으로만 사용됩니다. |
MSQL_TRANSACTION_MANAGER |
내부적으로만 사용됩니다. |
DATABASE_AUTONAME_MANAGER |
내부적으로만 사용됩니다. |
UTILITY_DYNAMIC_VECTOR |
내부적으로만 사용됩니다. |
UTILITY_SPARSE_BITMAP |
내부적으로만 사용됩니다. |
UTILITY_DATABASE_DROP |
내부적으로만 사용됩니다. |
UTILITY_DYNAMIC_MANAGER_VIEW |
내부적으로만 사용됩니다. |
UTILITY_DEBUG_FILESTREAM |
내부적으로만 사용됩니다. |
UTILITY_LOCK_INFORMATION |
내부적으로만 사용됩니다. |
VERSIONING_TRANSACTION |
내부적으로만 사용됩니다. |
VERSIONING_TRANSACTION_LIST |
내부적으로만 사용됩니다. |
VERSIONING_TRANSACTION_CHAIN |
내부적으로만 사용됩니다. |
VERSIONING_STATE |
내부적으로만 사용됩니다. |
VERSIONING_STATE_CHANGE |
내부적으로만 사용됩니다. |
KTM_VIRTUAL_CLOCK |
내부적으로만 사용됩니다. |