Partilhar via


sys.dm_os_latch_stats (Transact-SQL)

Aplica-se a:Banco de Dados SQL doAzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Banco de Dados SQL no Microsoft Fabric

Devolve informações sobre todas as esperas de latch organizadas por turma.

Observação

Para chamar isto de Azure Synapse Analytics ou Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_os_latch_stats. Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.

Nome da coluna Tipo de dados Description
latch_class Nvarchar(60) Nome da classe de latch.
waiting_requests_count bigint Número de esperas em trancos nesta turma. Este contador é incrementado no início de uma espera de trava.
wait_time_ms bigint O tempo total de espera, em milissegundos, nos fechos nesta aula.

Nota: Esta coluna é atualizada a cada cinco minutos durante uma espera por latch e no final daquela espera.
max_wait_time_ms bigint Tempo máximo que um objeto de memória esperou nesta trava. Se este valor for invulgarmente alto, pode indicar um bloqueio interno.
pdw_node_id int Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW)

O identificador do nó em que esta distribuição se encontra.

Permissions

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

No Banco de Dados SQL Basic, S0e S1 objetivos de serviço e para bancos de dados em pools elásticos , a conta de de administrador do servidor, a conta de de administrador do Microsoft Entra ou a associação aode função de servidor ##MS_ServerStateReader## é necessária. Em todos os outros objetivos de serviço do Banco de dados SQL, é necessária a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Observações

sys.dm_os_latch_stats pode ser usado para identificar a origem da contenda de latch examinando os números de espera relativos e os tempos de espera para as diferentes classes de latch. Em algumas situações, pode conseguir resolver ou reduzir a contenção do fecho. No entanto, pode haver situações que exigirão que você entre em contato com o Atendimento Microsoft.

Pode reiniciar o conteúdo da sys.dm_os_latch_stats usando DBCC SQLPERF o seguinte:

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

Isso redefine todos os contadores para 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.

Latches

Um latch é um objeto de sincronização interno leve semelhante a um cadeado, utilizado por vários componentes do SQL Server. Um latch é usado principalmente para sincronizar páginas da base de dados durante operações como buffer ou acesso a ficheiros. Cada fecho está associado a uma única unidade de alocação.

Uma espera de latch ocorre quando um pedido de latch não pode ser concedido imediatamente, porque o latch é mantido por outro thread num modo conflituoso. Ao contrário das fechaduras, uma trava é libertada imediatamente após a operação, mesmo em operações de escrita.

Os fechos são agrupados em classes com base nos componentes e na utilização. Nenhum ou mais latches de uma determinada classe podem existir a qualquer momento numa instância do SQL Server.

Observação

sys.dm_os_latch_stats não acompanha pedidos de latch que foram concedidos imediatamente ou que falharam sem esperar.

A tabela seguinte contém breves descrições das várias classes de latch.

Classe de latch Description
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 internas de espaço livre para heaps.
ALLOC_CACHE_MANAGER Usado para sincronizar testes internos de coerência.
ALLOC_FREESPACE_CACHE Usado para sincronizar o acesso a uma cache de páginas com espaço disponível para heaps e objetos binários grandes (BLOBs). A contenção em latches desta classe pode ocorrer quando múltiplas ligações tentam inserir linhas num heap ou BLOB ao mesmo tempo. Pode reduzir esta contenção particionando o objeto. Cada partição tem o seu próprio fecho. A partição distribuirá os inserts por múltiplos fechos.
ALLOC_EXTENT_CACHE Usado para sincronizar o acesso a um cache de extensões que contém páginas não alocadas. A contenção em latches desta classe pode ocorrer quando múltiplas ligações tentam alocar páginas de dados na mesma unidade de alocação ao mesmo tempo. Esta contenção pode ser reduzida particionando o objeto do qual esta unidade de alocação faz parte.
ACCESS_METHODS_DATASET_PARENT Usado para sincronizar o acesso ao conjunto de dados filho ao conjunto de dados pai durante operações paralelas.
ACCESS_METHODS_HOBT_FACTORY Usado para sincronizar o acesso a uma tabela de hash interna.
ACCESS_METHODS_HOBT Usado para sincronizar o acesso à representação em memória de um HoBt.
ACCESS_METHODS_HOBT_COUNT Usado para sincronizar o acesso a uma página HoBt e contadores de linhas.
ACCESS_METHODS_HOBT_VIRTUAL_ROOT Usado para sincronizar o acesso à abstração da página raiz de uma árvore B interna.
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC Usado para sincronizar o acesso à mesa de trabalho.
ACCESS_METHODS_BULK_ALLOC Usado para sincronizar o acesso dentro de alocadores em massa.
ACCESS_METHODS_SCAN_RANGE_GENERATOR Usado para sincronizar o acesso a um gerador de alcance durante varreduras paralelas.
ACCESS_METHODS_KEY_RANGE_GENERATOR Usado para sincronizar o acesso a operações de leitura antecipada durante varrimentos paralelos de intervalo de chaves.
APPEND_ONLY_STORAGE_INSERT_POINT Usado para sincronizar inserções em unidades de armazenamento rápidas apenas com anexação.
APPEND_ONLY_STORAGE_FIRST_ALLOC Usado para sincronizar a primeira alocação para uma unidade de armazenamento apenas de anexação.
APPEND_ONLY_STORAGE_UNIT_MANAGER Usado para sincronização interna de acesso a estruturas de dados dentro do gestor rápido de unidades de armazenamento apenas para anexação.
APPEND_ONLY_STORAGE_MANAGER Usado para sincronizar operações de redução no gestor rápido de unidades de armazenamento apenas para anexação.
BACKUP_RESULT_SET Usado para sincronizar conjuntos paralelos de resultados de backup.
BACKUP_TAPE_POOL Usado para sincronizar pools de fitas de backup.
BACKUP_LOG_REDO Usado para sincronizar operações de refaz de registos de backup.
BACKUP_INSTANCE_ID Usado para sincronizar a geração de IDs de instância para contadores de monitorização de desempenho de backup.
BACKUP_MANAGER Usado para sincronizar o gestor interno de backups.
BACKUP_MANAGER_DIFFERENTIAL Usado para sincronizar operações de backup diferencial com DBCC.
BACKUP_OPERATION Usado para sincronização interna de estruturas de dados dentro de uma operação de backup, como backup de bases de dados, registos ou ficheiros.
BACKUP_FILE_HANDLE Usado para sincronizar operações de abertura de ficheiros durante uma operação de restauro.
BUFFER Usado para sincronizar o acesso de curto prazo às páginas da base de dados. É necessário um buffer latch antes de ler ou modificar qualquer página da base de dados. A contenção do latch do buffer pode indicar vários problemas, incluindo páginas quentes e entradas/saídas lentas.

Esta aula de latch cobre todas as possíveis utilizações dos fechos de página. sys.dm_os_wait_stats faz diferença entre as esperas de latch da página causadas por operações de I/O e as operações de leitura e escrita na página.
BUFFER_POOL_GROW Usado para sincronização interna do gestor de buffers durante operações de crescimento do pool de buffer.
DATABASE_CHECKPOINT Usado para serializar checkpoints dentro de uma base de dados.
CLR_PROCEDURE_HASHTABLE Apenas para uso interno.
CLR_UDX_STORE Apenas para uso interno.
CLR_DATAT_ACCESS Apenas para uso interno.
CLR_XVAR_PROXY_LIST Apenas para uso interno.
DBCC_CHECK_AGGREGATE Apenas para uso interno.
DBCC_CHECK_RESULTSET Apenas para uso interno.
DBCC_CHECK_TABLE Apenas para uso interno.
DBCC_CHECK_TABLE_INIT Apenas para uso interno.
DBCC_CHECK_TRACE_LIST Apenas para uso interno.
DBCC_FILE_CHECK_OBJECT Apenas para uso interno.
DBCC_PERF Usado para sincronizar contadores internos de monitorização de desempenho.
DBCC_PFS_STATUS Apenas para uso interno.
DBCC_OBJECT_METADATA Apenas para uso interno.
DBCC_HASH_DLL Apenas para uso interno.
EVENTING_CACHE Apenas para uso interno.
FCB Usado para sincronizar o acesso ao bloco de controlo de ficheiros.
FCB_REPLICA Apenas para uso interno.
FGCB_ALLOC Use para sincronizar o acesso à informação de alocação round robin dentro de um grupo de ficheiros.
FGCB_ADD_REMOVE Use para sincronizar o acesso a grupos de ficheiros para operações de adicionar, eliminar, crescer e reduzir ficheiros.
FILEGROUP_MANAGER Apenas para uso interno.
FILE_MANAGER Apenas para uso interno.
FILESTREAM_FCB Apenas para uso interno.
FILESTREAM_FILE_MANAGER Apenas para uso interno.
FILESTREAM_GHOST_FILES Apenas para uso interno.
FILESTREAM_DFS_ROOT Apenas para uso interno.
LOG_MANAGER Apenas para uso interno.
FULLTEXT_DOCUMENT_ID Apenas para uso interno.
FULLTEXT_DOCUMENT_ID_TRANSACTION Apenas para uso interno.
FULLTEXT_DOCUMENT_ID_NOTIFY Apenas para uso interno.
FULLTEXT_LOGS Apenas para uso interno.
FULLTEXT_CRAWL_LOG Apenas para uso interno.
FULLTEXT_ADMIN Apenas para uso interno.
FULLTEXT_AMDIN_COMMAND_CACHE Apenas para uso interno.
FULLTEXT_LANGUAGE_TABLE Apenas para uso interno.
FULLTEXT_CRAWL_DM_LIST Apenas para uso interno.
FULLTEXT_CRAWL_CATALOG Apenas para uso interno.
FULLTEXT_FILE_MANAGER Apenas para uso interno.
DATABASE_MIRRORING_REDO Apenas para uso interno.
DATABASE_MIRRORING_SERVER Apenas para uso interno.
DATABASE_MIRRORING_CONNECTION Apenas para uso interno.
DATABASE_MIRRORING_STREAM Apenas para uso interno.
QUERY_OPTIMIZER_VD_MANAGER Apenas para uso interno.
QUERY_OPTIMIZER_ID_MANAGER Apenas para uso interno.
QUERY_OPTIMIZER_VIEW_REP Apenas para uso interno.
RECOVERY_BAD_PAGE_TABLE Apenas para uso interno.
RECOVERY_MANAGER Apenas para uso interno.
SECURITY_OPERATION_RULE_TABLE Apenas para uso interno.
SECURITY_OBJPERM_CACHE Apenas para uso interno.
SECURITY_CRYPTO Apenas para uso interno.
SECURITY_KEY_RING Apenas para uso interno.
SECURITY_KEY_LIST Apenas para uso interno.
SERVICE_BROKER_CONNECTION_RECEIVE Apenas para uso interno.
SERVICE_BROKER_TRANSMISSION Apenas para uso interno.
SERVICE_BROKER_TRANSMISSION_UPDATE Apenas para uso interno.
SERVICE_BROKER_TRANSMISSION_STATE Apenas para uso interno.
SERVICE_BROKER_TRANSMISSION_ERRORS Apenas para uso interno.
SSBXmitWork Apenas para uso interno.
SERVICE_BROKER_MESSAGE_TRANSMISSION Apenas para uso interno.
SERVICE_BROKER_MAP_MANAGER Apenas para uso interno.
SERVICE_BROKER_HOST_NAME Apenas para uso interno.
SERVICE_BROKER_READ_CACHE Apenas para uso interno.
SERVICE_BROKER_WAITFOR_MANAGER Usado para sincronizar um mapa ao nível de instância das filas de espera. Existe uma fila por cada tupla ID de base de dados, Versão da Base de Dados e ID da Fila. A contenção em latches desta classe pode ocorrer quando muitas ligações estão: Num estado WAITFOR(RECEIVE) wait; chamando WAITFOR(RECEIVE); ultrapassar o tempo ESPERA; receber uma mensagem; confirmar ou reverter a transação que contém o WAITFOR(RECEIVE); Podes reduzir a contenção diminuindo o número de threads num estado de espera (RECEIVE).
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Apenas para uso interno.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Apenas para uso interno.
SERVICE_BROKER_TRANSPORT Apenas para uso interno.
SERVICE_BROKER_MIRROR_ROUTE Apenas para uso interno.
TRACE_ID Apenas para uso interno.
TRACE_AUDIT_ID Apenas para uso interno.
RASTREIO Apenas para uso interno.
TRACE_CONTROLLER Apenas para uso interno.
TRACE_EVENT_QUEUE Apenas para uso interno.
TRANSACTION_DISTRIBUTED_MARK Apenas para uso interno.
TRANSACTION_OUTCOME Apenas para uso interno.
NESTING_TRANSACTION_READONLY Apenas para uso interno.
NESTING_TRANSACTION_FULL Apenas para uso interno.
MSQL_TRANSACTION_MANAGER Apenas para uso interno.
DATABASE_AUTONAME_MANAGER Apenas para uso interno.
UTILITY_DYNAMIC_VECTOR Apenas para uso interno.
UTILITY_SPARSE_BITMAP Apenas para uso interno.
UTILITY_DATABASE_DROP Apenas para uso interno.
UTILITY_DYNAMIC_MANAGER_VIEW Apenas para uso interno.
UTILITY_DEBUG_FILESTREAM Apenas para uso interno.
UTILITY_LOCK_INFORMATION Apenas para uso interno.
VERSIONING_TRANSACTION Apenas para uso interno.
VERSIONING_TRANSACTION_LIST Apenas para uso interno.
VERSIONING_TRANSACTION_CHAIN Apenas para uso interno.
VERSIONING_STATE Apenas para uso interno.
VERSIONING_STATE_CHANGE Apenas para uso interno.
KTM_VIRTUAL_CLOCK Apenas para uso interno.

Observação

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

Ver também

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