sys.dm_os_latch_stats (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Retorna as informações sobre todas as esperas de trava organizadas por classe.

Observação

Para chamar isso do Azure Synapse Analytics ou do PDW (Analytics Platform System), use o nome sys.dm_pdw_nodes_os_latch_stats. Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Nome da coluna Tipo de dados Descrição
latch_class nvarchar(60) Nome da classe da trava.
waiting_requests_count bigint Número de esperas em travas nessa classe. O contador é incrementado no início de uma espera de trava.
wait_time_ms bigint Tempo de espera total, em milissegundos, nas travas dessa classe.

Observação: essa coluna é atualizada a cada cinco minutos durante uma espera de trava e no final de uma espera de trava.
max_wait_time_ms bigint Tempo máximo durante qual um objeto de memória esperou essa trava. Se o valor for exageradamente alto, pode indicar um deadlock interno.
pdw_node_id int Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW)

O identificador do nó em que essa distribuição está ativada.

Permissões

No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE.

Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader## função de servidor. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader## são necessárias.

Permissões do SQL Server 2022 e posteriores

É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Comentários

sys.dm_os_latch_stats pode ser usado para identificar a origem de uma contenção de travamento, examinando os números e os tempos de espera relativos para as diferentes classes de trava. Em algumas situações, talvez seja possível resolver ou reduzir contenção de trava. No entanto, pode haver situações que exigirão que você entre em contato com o Atendimento ao Cliente da Microsoft.

É possível redefinir o conteúdo de sys.dm_os_latch_stats usando DBCC SQLPERF da seguinte maneira:

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

Isso redefine todos os contadores como 0.

Observação

Essas estatísticas não serão mantidas se o SQL Server for reiniciado. Todos os dados são cumulativos desde a última vez que as estatísticas foram redefinidas ou desde que o SQL Server foi iniciado.

Travas

Uma trava é um objeto de sincronização leve interno semelhante a um bloqueio, usado por vários componentes do SQL Server. Uma trava é usada principalmente para sincronizar páginas de banco de dados durante operações como buffer ou acesso a arquivos. Cada trava é associada a uma única unidade de alocação.

Uma espera de trava ocorre quando uma solicitação de trava não pode ser concedida imediatamente, porque a trava foi retida por outro thread em um modo conflitante. Ao contrário dos bloqueios, a trava é liberada logo após a operação, mesmo em operações de gravação.

As travas são agrupadas em classes baseadas em componentes e em utilização. Zero ou mais travas de uma classe específica podem existir a qualquer momento em uma instância do SQL Server.

Observação

sys.dm_os_latch_stats não rastreia solicitações de trava que foram concedidas imediatamente ou que falharam sem esperar.

A tabela a seguir contém breves descrições das diversas classes de trava.

Classe de trava Descrição
ALLOC_CREATE_RINGBUF Usado internamente pelo SQL Server para inicializar a sincronização da criação de um buffer de anel de alocação.
ALLOC_CREATE_FREESPACE_CACHE Usado para inicializar a sincronização de caches de espaço livre internos para heaps.
ALLOC_CACHE_MANAGER Usada para sincronizar testes de coerência internos.
ALLOC_FREESPACE_CACHE Usada para sincronizar o acesso a um cache de páginas com espaço disponível para heaps e BLOBs (objetos binários grandes). A contenção em travas dessa classe pode ocorrer quando várias conexões tentam inserir linhas em um heap ou BLOB ao mesmo tempo. É possível reduzir essa contenção através do particionamento do objeto. Cada partição possui sua própria trava. O particionamento distribui as inserções em várias travas.
ALLOC_EXTENT_CACHE Usada para sincronizar o acesso a um cache de extensões contendo páginas que não são alocadas. A contenção em travas dessa classe pode ocorrer quando várias conexões tentam alocar páginas de dados na mesma unidade de alocação ao mesmo tempo. Essa contenção pode ser reduzida através do particionamento do objeto do qual a unidade de alocação faz parte.
ACCESS_METHODS_DATASET_PARENT Usada para sincronizar o acesso de conjunto de dados filho ao conjunto de dados pai durante operações paralelas.
ACCESS_METHODS_HOBT_FACTORY Usada para sincronizar o acesso a uma tabela de hash interna.
ACCESS_METHODS_HOBT Usada para sincronizar o acesso à representação em memória de um HoBt.
ACCESS_METHODS_HOBT_COUNT Usada para sincronizar o acesso a uma página HoBt e contadores de linha.
ACCESS_METHODS_HOBT_VIRTUAL_ ROOT Usada para sincronizar o acesso à abstração de página raiz de uma árvore B interna.
ACCESS_METHODS_CACHE_ONLY_ HOBT_ALLOC Usada para sincronizar o acesso de tabela de trabalho.
ACCESS_METHODS_BULK_ALLOC Usada para sincronizar o acesso dentro de alocadores em massa.
ACCESS_METHODS_SCAN_RANGE_ GENERATOR Usada para sincronizar o acesso a um gerador de intervalos durante exames paralelos.
ACCESS_METHODS_KEY_RANGE_ GENERATOR Usada para sincronizar o acesso a operações read-ahead durante exames paralelos de intervalo de chave.
APPEND_ONLY_STORAGE_INSERT_ POINT Usada para sincronizar inserções em unidades de armazenamento rápidas somente de acréscimo.
APPEND_ONLY_STORAGE_FIRST_ALLOC Usada ao sincronizar a primeira alocação para uma unidade de armazenamento somente de acréscimo.
APPEND_ONLY_STORAGE_UNIT_ MANAGER Usada para sincronização de acesso de estrutura de dados interna dentro do gerenciador de unidades de armazenamento rápidas somente de acréscimo.
APPEND_ONLY_STORAGE_MANAGER Usada para sincronizar operações de redução no gerenciador de unidades de armazenamento rápidas somente de acréscimo.
BACKUP_RESULT_SET Usada para sincronizar conjuntos de resultados de backup paralelos.
BACKUP_TAPE_POOL Usada para sincronizar pools de fita de backup.
BACKUP_LOG_REDO Usada para sincronizar operações que refazem o log de backup.
BACKUP_INSTANCE_ID Usada para sincronizar a geração de IDs de instâncias para contadores de monitoramento de desempenho de backup.
BACKUP_MANAGER Usada para sincronizar o gerenciador de backup interno.
BACKUP_MANAGER_DIFFERENTIAL Usada para sincronizar operações de backup diferencial com DBCC.
BACKUP_OPERATION Usada para a sincronização da estrutura de dados interna dentro de uma operação de backup, tal como banco de dados, log ou backup de arquivo.
BACKUP_FILE_HANDLE Usada para sincronizar operações de abertura de arquivos durante uma operação de restauração.
BUFFER Usada para sincronizar o acesso a curto prazo a páginas de banco de dados. Uma trava de buffer é necessária antes de ler ou modificar qualquer página de banco de dados. A contenção da trava de buffer pode indicar vários problemas, inclusive hotpages e E/S lentas.

Essa classe de trava abrange todos os possíveis usos de travas de página. sys.dm_os_wait_stats faz a diferença entre as esperas de trava de página causadas por operações de E/S e operações de leitura e gravação na página.
BUFFER_POOL_GROW Usada para a sincronização do gerenciador de buffer interno durante as operações de geração de pools de buffers.
DATABASE_CHECKPOINT Usada para serializar pontos de verificação dentro de um banco de dados.
CLR_PROCEDURE_HASHTABLE Somente para uso interno.
CLR_UDX_STORE Somente para uso interno.
CLR_DATAT_ACCESS Somente para uso interno.
CLR_XVAR_PROXY_LIST Somente para uso interno.
DBCC_CHECK_AGGREGATE Somente para uso interno.
DBCC_CHECK_RESULTSET Somente para uso interno.
DBCC_CHECK_TABLE Somente para uso interno.
DBCC_CHECK_TABLE_INIT Somente para uso interno.
DBCC_CHECK_TRACE_LIST Somente para uso interno.
DBCC_FILE_CHECK_OBJECT Somente para uso interno.
DBCC_PERF Usada para sincronizar contadores de monitor de desempenho internos.
DBCC_PFS_STATUS Somente para uso interno.
DBCC_OBJECT_METADATA Somente para uso interno.
DBCC_HASH_DLL Somente para uso interno.
EVENTING_CACHE Somente para uso interno.
FCB Usada para sincronizar o acesso ao bloco de controle de arquivo.
FCB_REPLICA Somente para uso interno.
FGCB_ALLOC Use para sincronizar o acesso às informações de alocação round robin em um grupo de arquivos.
FGCB_ADD_REMOVE Use para sincronizar o acesso a grupos de arquivos para operações de adicionar, soltar, aumentar e reduzir arquivos.
FILEGROUP_MANAGER Somente para uso interno.
FILE_MANAGER Somente para uso interno.
FILESTREAM_FCB Somente para uso interno.
FILESTREAM_FILE_MANAGER Somente para uso interno.
FILESTREAM_GHOST_FILES Somente para uso interno.
FILESTREAM_DFS_ROOT Somente para uso interno.
LOG_MANAGER Somente para uso interno.
FULLTEXT_DOCUMENT_ID Somente para uso interno.
FULLTEXT_DOCUMENT_ID_ TRANSACTION Somente para uso interno.
FULLTEXT_DOCUMENT_ID_NOTIFY Somente para uso interno.
FULLTEXT_LOGS Somente para uso interno.
FULLTEXT_CRAWL_LOG Somente para uso interno.
FULLTEXT_ADMIN Somente para uso interno.
FULLTEXT_AMDIN_COMMAND_CACHE Somente para uso interno.
FULLTEXT_LANGUAGE_TABLE Somente para uso interno.
FULLTEXT_CRAWL_DM_LIST Somente para uso interno.
FULLTEXT_CRAWL_CATALOG Somente para uso interno.
FULLTEXT_FILE_MANAGER Somente para uso interno.
DATABASE_MIRRORING_REDO Somente para uso interno.
DATABASE_MIRRORING_SERVER Somente para uso interno.
DATABASE_MIRRORING_CONNECTION Somente para uso interno.
DATABASE_MIRRORING_STREAM Somente para uso interno.
QUERY_OPTIMIZER_VD_MANAGER Somente para uso interno.
QUERY_OPTIMIZER_ID_MANAGER Somente para uso interno.
QUERY_OPTIMIZER_VIEW_REP Somente para uso interno.
RECOVERY_BAD_PAGE_TABLE Somente para uso interno.
RECOVERY_MANAGER Somente para uso interno.
SECURITY_OPERATION_RULE_TABLE Somente para uso interno.
SECURITY_OBJPERM_CACHE Somente para uso interno.
SECURITY_CRYPTO Somente para uso interno.
SECURITY_KEY_RING Somente para uso interno.
SECURITY_KEY_LIST Somente para uso interno.
SERVICE_BROKER_CONNECTION_RECEIVE Somente para uso interno.
SERVICE_BROKER_TRANSMISSION Somente para uso interno.
SERVICE_BROKER_TRANSMISSION_UPDATE Somente para uso interno.
SERVICE_BROKER_TRANSMISSION_STATE Somente para uso interno.
SERVICE_BROKER_TRANSMISSION_ERRORS Somente para uso interno.
SSBXmitWork Somente para uso interno.
SERVICE_BROKER_MESSAGE_TRANSMISSION Somente para uso interno.
SERVICE_BROKER_MAP_MANAGER Somente para uso interno.
SERVICE_BROKER_HOST_NAME Somente para uso interno.
SERVICE_BROKER_READ_CACHE Somente para uso interno.
SERVICE_BROKER_WAITFOR_MANAGER Usado para sincronizar um mapa de nível de instância de filas de espera. Existe uma fila por ID de banco de dados, versão do banco de dados e tupla de ID da fila. A contenção em travas dessa classe pode ocorrer quando muitas conexões são: Em um estado de espera WAITFOR(RECEIVE); chamando WAITFOR(RECEIVE); excedendo o tempo limite de WAITFOR; receber uma mensagem; confirmando ou revertendo a transação que contém o WAITFOR(RECEIVE); Você pode reduzir a contenção reduzindo o número de threads em um estado de espera WAITFOR(RECEIVE).
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Somente para uso interno.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Somente para uso interno.
SERVICE_BROKER_TRANSPORT Somente para uso interno.
SERVICE_BROKER_MIRROR_ROUTE Somente para uso interno.
TRACE_ID Somente para uso interno.
TRACE_AUDIT_ID Somente para uso interno.
TRACE Somente para uso interno.
TRACE_CONTROLLER Somente para uso interno.
TRACE_EVENT_QUEUE Somente para uso interno.
TRANSACTION_DISTRIBUTED_MARK Somente para uso interno.
TRANSACTION_OUTCOME Somente para uso interno.
NESTING_TRANSACTION_READONLY Somente para uso interno.
NESTING_TRANSACTION_FULL Somente para uso interno.
MSQL_TRANSACTION_MANAGER Somente para uso interno.
DATABASE_AUTONAME_MANAGER Somente para uso interno.
UTILITY_DYNAMIC_VECTOR Somente para uso interno.
UTILITY_SPARSE_BITMAP Somente para uso interno.
UTILITY_DATABASE_DROP Somente para uso interno.
UTILITY_DYNAMIC_MANAGER_VIEW Somente para uso interno.
UTILITY_DEBUG_FILESTREAM Somente para uso interno.
UTILITY_LOCK_INFORMATION Somente para uso interno.
VERSIONING_TRANSACTION Somente para uso interno.
VERSIONING_TRANSACTION_LIST Somente para uso interno.
VERSIONING_TRANSACTION_CHAIN Somente para uso interno.
VERSIONING_STATE Somente para uso interno.
VERSIONING_STATE_CHANGE Somente para uso interno.
KTM_VIRTUAL_CLOCK Somente para uso interno.

Observação

A documentação usa o termo árvore B geralmente em referência a índices. Em índices rowstore, o Mecanismo de Banco de Dados implementa uma árvore B+. Isso não se aplica a índices columnstore ou índices em tabelas com otimização de memória. Para obter mais informações, confira o Guia de arquitetura e design do índice do SQL Server e SQL do Azure.

Confira também

DBCC SQLPERF (Transact-SQL)
Exibições de gerenciamento dinâmico relacionadas ao sistema operacional do SQL Server (Transact-SQL)
SQL Server, objeto Latches