sys.dm_os_latch_stats(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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, S0 및 S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, 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 | 데이터베이스 내에서 검사점을 serialize하는 데 사용됩니다. |
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 | 내부용으로만 사용됩니다. |
참고 항목
설명서는 인덱스를 지칭할 때 B-트리라는 용어를 사용합니다. rowstore 인덱스에서 데이터베이스 엔진은 B+ 트리를 구현합니다. 이는 columnstore 인덱스나 메모리 최적화 테이블 인덱스에는 적용되지 않습니다. 자세한 내용은 SQL Server 및 Azure SQL 인덱스 아키텍처 및 디자인 가이드를 참조하세요.
참고 항목
DBCC SQLPERF(Transact-SQL)
SQL Server 운영 체제 관련 동적 관리 뷰(Transact-SQL)
SQL Server, 래치 개체