sys.dm_os_latch_stats (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Restituisce informazioni relative a tutte le attese di latch organizzate per classe.
Nota
Per chiamare questa operazione da Azure Synapse Analytics o da Platform System (PDW), usare il nome sys.dm_pdw_nodes_os_latch_stats. Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
latch_class | nvarchar(60) | 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. Nota: questa colonna viene aggiornata ogni cinque minuti durante un'attesa di latch e alla fine di un'attesa di latch. |
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. |
pdw_node_id | int | Si applica a: Azure Synapse Analytics, Piattaforma di analisi (PDW) Identificatore del nodo in cui è attiva la distribuzione. |
Autorizzazioni
In SQL Server e Istanza gestita di SQL è richiesta l'autorizzazione VIEW SERVER STATE
.
Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerStateReader##
al ruolo del server. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE STATE
per il database o l'adesione ruolo del server ##MS_ServerStateReader##
.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il 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. Tuttavia, potrebbero verificarsi situazioni che richiederanno di contattare il Servizio supporto tecnico 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
Queste statistiche non vengono mantenute se SQL Server viene riavviato. Tutti i dati sono cumulativi dall'ultima reimpostazione delle statistiche o dall'avvio di SQL Server.
Latch
Un latch è un oggetto di sincronizzazione leggero interno simile a un blocco, usato da vari componenti di SQL Server. Un latch viene usato principalmente per sincronizzare le pagine del database durante operazioni quali buffer o accesso ai file. 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. Zero o più latch di una determinata classe possono esistere in qualsiasi momento in un'istanza di SQL Server.
Nota
sys.dm_os_latch_stats
non tiene traccia delle richieste di latch concesse immediatamente o non riuscite senza attendere.
Nella tabella seguente è riportata una breve descrizione delle varie classi di latch.
Classe di latch | Descrizione |
---|---|
ALLOC_CREATE_RINGBUF | Usato internamente da SQL Server per inizializzare la sincronizzazione della creazione di un buffer circolare di allocazione. |
ALLOC_CREATE_FREESPACE_CACHE | Utilizzato per inizializzare la sincronizzazione delle cache di 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 analisi parallele. |
ACCESS_METHODS_KEY_RANGE_GENERATOR | Utilizzato per sincronizzare l'accesso alle operazioni read-ahead durante le analisi 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. sys.dm_os_wait_stats fa differenza tra le attese di latch di pagina causate dalle operazioni di I/O e dalle 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 | Usare per sincronizzare l'accesso ai filegroup per operazioni di aggiunta, eliminazione, aumento e compattazione dei 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 | Usato per sincronizzare una mappa a livello di istanza delle code di attesa. Esiste una coda per ID database, versione del database e tupla id coda. La contesa sui latch di questa classe può verificarsi quando molte connessioni sono: in uno stato di attesa WAITFOR(RECEIVE); chiamata WAITFOR(RECEIVE); superamento del timeout WAITFOR; ricezione di un messaggio; commit o rollback della transazione contenente WAITFOR(RECEIVE); È possibile ridurre la contesa riducendo il numero di thread in uno stato di attesa WAITFOR(RECEIVE). |
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. |
Nota
Nella documentazione viene usato in modo generico il termine albero B in riferimento agli indici. Negli indici rowstore, il motore di database implementa un albero B+. Ciò non si applica a indici columnstore o a indici in tabelle ottimizzate per la memoria. Per altre informazioni, vedere Architettura e guida per la progettazione degli indici SQL Server e Azure SQL.
Vedi anche
DBCC SQLPERF (Transact-SQL)
Viste a gestione dinamica correlate al sistema operativo SQL Server (Transact-SQL)
Oggetto Latches di SQL Server