sys.dm_os_latch_stats(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

클래스별로 구성된 모든 래치 대기에 대한 정보를 반환합니다.

참고 항목

Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_os_latch_stats 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

열 이름 데이터 형식 설명
latch_class nvarchar(60) 래치 클래스의 이름입니다.
waiting_requests_count bigint 이 클래스의 래치 대기 수입니다. 이 카운터는 래치 대기가 시작될 때 증가합니다.
wait_time_ms bigint 이 클래스의 총 래치 대기 시간(밀리초)입니다.

참고: 이 열은 래치 대기 중 및 래치 대기가 끝날 때 5분마다 업데이트됩니다.
max_wait_time_ms bigint 메모리 개체가 이 래치에서 대기한 최대 시간입니다. 이 값이 지나치게 높으면 내부 교착 상태가 발생한 것일 수 있습니다.
pdw_node_id int 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW)

이 배포가 있는 노드의 식별자입니다.

사용 권한

SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE 권한이 필요합니다.

SQL Database Basic, S0S1 서비스 목표 및 탄력적 풀의 데이터베이스에는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 서버 역할##MS_ServerStateReader##멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE 권한 또는 ##MS_ServerStateReader## 서버 역할의 멤버 자격이 필요합니다.

SQL Server 2022 이상에 대한 권한

서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.

설명

sys.dm_os_latch_stats 사용하여 다른 래치 클래스에 대한 상대 대기 번호 및 대기 시간을 검사하여 래치 경합의 원인을 식별할 수 있습니다. 경우에 따라 래치 경합을 해결하거나 줄일 수 있습니다. 그러나 Microsoft 고객 지원 서비스에 문의해야 하는 상황이 있을 수 있습니다.

다음과 같이 사용하여 sys.dm_os_latch_stats DBCC SQLPERF 내용을 다시 설정할 수 있습니다.

DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);  
GO  

그러면 모든 카운터가 0으로 다시 설정됩니다.

참고 항목

SQL Server를 다시 시작하면 이러한 통계가 유지되지 않습니다. 통계가 마지막으로 다시 설정되었거나 SQL Server가 시작된 이후 모든 데이터는 누적됩니다.

래치

래치는 잠금과 유사한 내부 경량 동기화 개체로, 다양한 SQL Server 구성 요소에서 사용됩니다. 래치는 주로 버퍼 또는 파일 액세스와 같은 작업 중에 데이터베이스 페이지를 동기화하는 데 사용됩니다. 각 래치는 단일 할당 단위와 연결되어 있습니다.

충돌 모드의 다른 스레드에서 래치를 보유하기 때문에 래치 요청에 즉시 권한을 부여할 수 없을 때 래치 대기가 발생합니다. 잠금과 달리 래치는 쓰기 작업에서도 작업 직후에 해제됩니다.

래치는 구성 요소 및 사용량에 따라 클래스로 그룹화됩니다. 특정 클래스의 래치가 0개 이상 있으면 언제든지 SQL Server 인스턴스에 존재할 수 있습니다.

참고 항목

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 복원 작업 동안 파일 열기 작업을 동기화하는 데 사용됩니다.
버퍼 데이터베이스 페이지에 대한 단기 액세스를 동기화하는 데 사용됩니다. 데이터베이스 페이지를 읽거나 수정하기 전에 버퍼 래치가 필요합니다. 버퍼 래치 경합은 핫 페이지 및 느린 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 파일 작업을 추가, 삭제, 증가 및 축소하기 위해 파일 그룹에 대한 액세스를 동기화하는 데 사용합니다.
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 대기 큐의 인스턴스 수준 맵을 동기화하는 데 사용됩니다. 데이터베이스 ID, 데이터베이스 버전 및 큐 ID 튜플당 하나의 큐가 있습니다. 이 클래스의 래치에 대한 경합은 많은 연결이 있을 때 발생할 수 있습니다. WAITFOR(RECEIVE) 대기 상태; WAITFOR(RECEIVE) 호출 WAITFOR 시간 제한을 초과합니다. 메시지 수신 WAITFOR(RECEIVE)가 포함된 트랜잭션 커밋 또는 롤백 WAITFOR(RECEIVE) 대기 상태의 스레드 수를 줄여 경합을 줄일 수 있습니다.
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 내부용으로만 사용됩니다.

참고 항목

SQL Server 설명서는 인덱스를 지칭할 때 B-트리라는 용어를 사용합니다. rowstore 인덱스에서 SQL Server는 B+ 트리를 구현합니다. 이는 columnstore 인덱스나 메모리 내 데이터 저장소에는 적용되지 않습니다. 자세한 내용은 SQL Server 및 Azure SQL 인덱스 아키텍처 및 디자인 가이드를 참조 하세요.

참고 항목

DBCC SQLPERF(Transact-SQL)
SQL Server 운영 체제 관련 동적 관리 뷰(Transact-SQL)
SQL Server, 래치 개체