Condividi tramite


sys.dm_os_latch_stats (Transact-SQL)

Restituisce informazioni relative a tutte le attese di latch organizzate per classe.

Nome colonna

Tipo di dati

Descrizione

latch_class

nvarchar(120)

Nome della classe di latch.

waiting_requests_count

bigint

Numero di attese di latch nella classe specifica. Questo contatore viene incrementato all'inizio di un'attesa di latch.

wait_time_ms

bigint

Tempo totale di attesa dei latch, espresso in millisecondi, nella classe specifica.

NotaNota
Questa colonna viene aggiornata ogni cinque minuti durante un'attesa di latch e alla fine dell'attesa di latch specifica.

max_wait_time_ms

bigint

Tempo massimo che un oggetto memoria ha atteso il latch specifico. Un valore insolitamente elevato può indicare un deadlock interno.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Osservazioni

È possibile utilizzare la vista sys.dm_os_latch_stats per identificare l'origine della contesa di latch mediante l'analisi dei numeri di attesa relativi e dei tempi di attesa per le varie classi di latch. In alcune situazioni è possibile risolvere o ridurre la contesa di latch. Si possono tuttavia presentare situazioni in cui è necessario contattare il Servizio Supporto Tecnico Clienti Microsoft.

È possibile ripristinare il contenuto di sys.dm_os_latch_stats utilizzando DBCC SQLPERF come illustrato di seguito:

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

Questo comando reimposta tutti i contatori su 0.

[!NOTA]

Se SQL Server viene riavviato, le statistiche non sono persistenti. Tutti i dati sono cumulativi a partire dall'ultima reimpostazione delle statistiche oppure dall'avvio di SQL Server.

Latch

Un latch è un oggetto di sincronizzazione leggero utilizzato da diversi componenti di SQL Server. Un latch viene principalmente utilizzato per sincronizzare le pagine di database. Ogni latch è associato a un'unica unità di allocazione.

Un'attesa di latch si verifica quando non è possibile concedere immediatamente una richiesta di latch perché il latch è mantenuto attivo da un altro thread con una modalità in conflitto. A differenza dei blocchi, i latch vengono rilasciati subito dopo l'operazione, anche nel caso di operazioni di scrittura.

I latch sono raggruppati in classi in base ai componenti e all'utilizzo. In un'istanza di SQL Server possono essere presenti zero o più latch di una classe specifica in un momento qualsiasi.

[!NOTA]

sys.dm_os_latch_stats non tiene traccia delle richieste di latch concesse immediatamente oppure che hanno avuto esito negativo senza alcuna attesa.

Nella tabella seguente è riportata una breve descrizione delle varie classi di latch.

Classe di latch

Descrizione

ALLOC_CREATE_RINGBUF

Utilizzato internamente da SQL Server per inizializzare la sincronizzazione della creazione di un buffer circolare per le allocazioni.

ALLOC_CREATE_FREESPACE_CACHE

Utilizzato per inizializzare la sincronizzazione delle cache dello spazio disponibile interno per gli heap.

ALLOC_CACHE_MANAGER

Utilizzato per sincronizzare i test di coerenza interna.

ALLOC_FREESPACE_CACHE

Utilizzato per sincronizzare l'accesso a una cache di pagine con spazio disponibile per heap e oggetti BLOB (Binary Large Object). È possibile che si verifichino contese a livello di latch appartenenti a questa classe se più connessioni cercano contemporaneamente di inserire righe in un heap o oggetto BLOB. È possibile ridurre le contese tramite il partizionamento dell'oggetto. Ogni partizione dispone del proprio latch. Il partizionamento distribuirà gli inserimenti tra più latch.

ALLOC_EXTENT_CACHE

Utilizzato per sincronizzare l'accesso a una cache di extent contenente le pagine non allocate. È possibile che si verifichino contese a livello di latch appartenenti a questa classe se più connessioni cercano contemporaneamente di allocare pagine di dati nella stessa unità di allocazione. È possibile ridurre le contese tramite il partizionamento dell'oggetto a cui appartiene l'unità di allocazione specifica.

ACCESS_METHODS_DATASET_PARENT

Utilizzato per sincronizzare l'acceso al set di dati figlio al set di dati padre durante le operazioni parallele.

ACCESS_METHODS_HOBT_FACTORY

Utilizzato per sincronizzare l'accesso alla tabella hash interna.

ACCESS_METHODS_HOBT

Utilizzato per sincronizzare l'accesso alla rappresentazione in memoria di una risorsa HOBT.

ACCESS_METHODS_HOBT_COUNT

Utilizzato per sincronizzare l'accesso ai contatori di pagine e righe HOBT.

ACCESS_METHODS_HOBT_VIRTUAL_ROOT

Utilizzato per sincronizzare l'accesso all'astrazione di pagina radice di un albero B interno.

ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC

Utilizzato per sincronizzare l'accesso alle tabelle di lavoro.

ACCESS_METHODS_BULK_ALLOC

Utilizzato per sincronizzare l'accesso all'interno degli allocatori bulk.

ACCESS_METHODS_SCAN_RANGE_GENERATOR

Utilizzato per sincronizzare l'accesso a un generatore di intervalli durante le scansioni parallele.

ACCESS_METHODS_KEY_RANGE_GENERATOR

Utilizzato per sincronizzare l'accesso alle operazioni read-ahead durante le scansioni parallele degli intervalli di chiavi.

APPEND_ONLY_STORAGE_INSERT_POINT

Utilizzato per sincronizzare gli inserimenti nelle unità di archiviazione rapide che supportano solo l'accodamento di allocazioni.

APPEND_ONLY_STORAGE_FIRST_ALLOC

Utilizzato per sincronizzare la prima allocazione nelle unità di archiviazione rapide che supportano solo l'accodamento di allocazioni.

APPEND_ONLY_STORAGE_UNIT_MANAGER

Utilizzato per la sincronizzazione dell'accesso alle strutture interne di dati all'interno della gestione nelle unità di archiviazione rapide che supportano solo l'accodamento di allocazioni

APPEND_ONLY_STORAGE_MANAGER

Utilizzato per sincronizzare le operazioni di compattazione nella gestione delle unità di archiviazione rapide che supportano solo l'accodamento di allocazioni.

BACKUP_RESULT_SET

Utilizzato per sincronizzare i set di risultati del backup parallelo.

BACKUP_TAPE_POOL

Utilizzato per sincronizzare i pool di nastri di backup.

BACKUP_LOG_REDO

Utilizzato per sincronizzare le operazioni di rollforward del log dal backup.

BACKUP_INSTANCE_ID

Utilizzato per sincronizzare la generazione degli ID di istanza per i contatori di monitoraggio delle prestazioni del backup.

BACKUP_MANAGER

Utilizzato per sincronizzare la gestione dei backup interni.

BACKUP_MANAGER_DIFFERENTIAL

Utilizzato per sincronizzare le operazioni di backup differenziale con DBCC.

BACKUP_OPERATION

Utilizzato per la sincronizzazione delle strutture interne di dati all'interno di un'operazione di backup, ad esempio il backup di database, log o file.

BACKUP_FILE_HANDLE

Utilizzato per sincronizzare le operazioni di apertura di file durante un'operazione di ripristino.

BUFFER

Utilizzato per sincronizzare l'accesso a breve termine alle pagine di database. È richiesto un latch del buffer prima di leggere o modificare qualsiasi pagina di database. Una contesa di latch del buffer può indicare numerosi problemi, inclusi I/O lenti e pagine utilizzate con maggiore frequenza.

Questa classe di latch copre tutti i possibili utilizzi dei latch di pagina. La vista sys.dm_os_wait_stats distingue le attese dei latch di pagina provocate da operazioni di I/O da quelle provocate da operazioni di lettura e scrittura nella pagina.

BUFFER_POOL_GROW

Utilizzato per la sincronizzazione della gestione dei buffer interni durante le operazioni di aumento delle dimensioni del pool di buffer.

DATABASE_CHECKPOINT

Utilizzato per serializzare i checkpoint all'interno di un database.

CLR_PROCEDURE_HASHTABLE

Solo per uso interno.

CLR_UDX_STORE

Solo per uso interno.

CLR_DATAT_ACCESS

Solo per uso interno.

CLR_XVAR_PROXY_LIST

Solo per uso interno.

DBCC_CHECK_AGGREGATE

Solo per uso interno.

DBCC_CHECK_RESULTSET

Solo per uso interno.

DBCC_CHECK_TABLE

Solo per uso interno.

DBCC_CHECK_TABLE_INIT

Solo per uso interno.

DBCC_CHECK_TRACE_LIST

Solo per uso interno.

DBCC_FILE_CHECK_OBJECT

Solo per uso interno.

DBCC_PERF

Utilizzato per sincronizzare i contatori di monitoraggio delle prestazioni interne.

DBCC_PFS_STATUS

Solo per uso interno.

DBCC_OBJECT_METADATA

Solo per uso interno.

DBCC_HASH_DLL

Solo per uso interno.

EVENTING_CACHE

Solo per uso interno.

FCB

Utilizzato per sincronizzare l'accesso al blocco di controllo file.

FCB_REPLICA

Solo per uso interno.

FGCB_ALLOC

Utilizzato per sincronizzare l'accesso alle informazioni sull'allocazione round robin all'interno di un filegroup.

FGCB_ADD_REMOVE

Utilizzato per sincronizzare l'accesso a filegroup per operazioni ADD e DROP su file.

FILEGROUP_MANAGER

Solo per uso interno.

FILE_MANAGER

Solo per uso interno.

FILESTREAM_FCB

Solo per uso interno.

FILESTREAM_FILE_MANAGER

Solo per uso interno.

FILESTREAM_GHOST_FILES

Solo per uso interno.

FILESTREAM_DFS_ROOT

Solo per uso interno.

LOG_MANAGER

Solo per uso interno.

FULLTEXT_DOCUMENT_ID

Solo per uso interno.

FULLTEXT_DOCUMENT_ID_TRANSACTION

Solo per uso interno.

FULLTEXT_DOCUMENT_ID_NOTIFY

Solo per uso interno.

FULLTEXT_LOGS

Solo per uso interno.

FULLTEXT_CRAWL_LOG

Solo per uso interno.

FULLTEXT_ADMIN

Solo per uso interno.

FULLTEXT_AMDIN_COMMAND_CACHE

Solo per uso interno.

FULLTEXT_LANGUAGE_TABLE

Solo per uso interno.

FULLTEXT_CRAWL_DM_LIST

Solo per uso interno.

FULLTEXT_CRAWL_CATALOG

Solo per uso interno.

FULLTEXT_FILE_MANAGER

Solo per uso interno.

DATABASE_MIRRORING_REDO

Solo per uso interno.

DATABASE_MIRRORING_SERVER

Solo per uso interno.

DATABASE_MIRRORING_CONNECTION

Solo per uso interno.

DATABASE_MIRRORING_STREAM

Solo per uso interno.

QUERY_OPTIMIZER_VD_MANAGER

Solo per uso interno.

QUERY_OPTIMIZER_ID_MANAGER

Solo per uso interno.

QUERY_OPTIMIZER_VIEW_REP

Solo per uso interno.

RECOVERY_BAD_PAGE_TABLE

Solo per uso interno.

RECOVERY_MANAGER

Solo per uso interno.

SECURITY_OPERATION_RULE_TABLE

Solo per uso interno.

SECURITY_OBJPERM_CACHE

Solo per uso interno.

SECURITY_CRYPTO

Solo per uso interno.

SECURITY_KEY_RING

Solo per uso interno.

SECURITY_KEY_LIST

Solo per uso interno.

SERVICE_BROKER_CONNECTION_RECEIVE

Solo per uso interno.

SERVICE_BROKER_TRANSMISSION

Solo per uso interno.

SERVICE_BROKER_TRANSMISSION_UPDATE

Solo per uso interno.

SERVICE_BROKER_TRANSMISSION_STATE

Solo per uso interno.

SERVICE_BROKER_TRANSMISSION_ERRORS

Solo per uso interno.

SSBXmitWork

Solo per uso interno.

SERVICE_BROKER_MESSAGE_TRANSMISSION

Solo per uso interno.

SERVICE_BROKER_MAP_MANAGER

Solo per uso interno.

SERVICE_BROKER_HOST_NAME

Solo per uso interno.

SERVICE_BROKER_READ_CACHE

Solo per uso interno.

SERVICE_BROKER_WAITFOR_MANAGER

Solo per uso interno.

SERVICE_BROKER_WAITFOR_TRANSACTION_DATA

Solo per uso interno.

SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA

Solo per uso interno.

SERVICE_BROKER_TRANSPORT

Solo per uso interno.

SERVICE_BROKER_MIRROR_ROUTE

Solo per uso interno.

TRACE_ID

Solo per uso interno.

TRACE_AUDIT_ID

Solo per uso interno.

TRACE

Solo per uso interno.

TRACE_CONTROLLER

Solo per uso interno.

TRACE_EVENT_QUEUE

Solo per uso interno.

TRANSACTION_DISTRIBUTED_MARK

Solo per uso interno.

TRANSACTION_OUTCOME

Solo per uso interno.

NESTING_TRANSACTION_READONLY

Solo per uso interno.

NESTING_TRANSACTION_FULL

Solo per uso interno.

MSQL_TRANSACTION_MANAGER

Solo per uso interno.

DATABASE_AUTONAME_MANAGER

Solo per uso interno.

UTILITY_DYNAMIC_VECTOR

Solo per uso interno.

UTILITY_SPARSE_BITMAP

Solo per uso interno.

UTILITY_DATABASE_DROP

Solo per uso interno.

UTILITY_DYNAMIC_MANAGER_VIEW

Solo per uso interno.

UTILITY_DEBUG_FILESTREAM

Solo per uso interno.

UTILITY_LOCK_INFORMATION

Solo per uso interno.

VERSIONING_TRANSACTION

Solo per uso interno.

VERSIONING_TRANSACTION_LIST

Solo per uso interno.

VERSIONING_TRANSACTION_CHAIN

Solo per uso interno.

VERSIONING_STATE

Solo per uso interno.

VERSIONING_STATE_CHANGE

Solo per uso interno.

KTM_VIRTUAL_CLOCK

Solo per uso interno.