Delen via


sys.dm_os_latch_stats (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Geeft informatie terug over alle venttijden die per klas zijn georganiseerd.

Opmerking

Om dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW), gebruik de naam sys.dm_pdw_nodes_os_latch_stats. Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Kolomnaam Gegevenstype Description
latch_class nvarchar(60) Naam van de latch-klas.
waiting_requests_count bigint Aantal wachters op de vergrendelingen in deze klas. Deze teller wordt verhoogd aan het begin van een latch-wacht.
wait_time_ms bigint Totale wachttijd, in milliseconden, op de latches in deze klas.

Notitie: Deze column wordt elke vijf minuten bijgewerkt tijdens een latch-wacht en aan het einde van een latch-wacht.
max_wait_time_ms bigint Maximale tijd dat een geheugenobject op deze latch heeft gewacht. Als deze waarde ongewoon hoog is, kan dit wijzen op een interne deadlock.
pdw_node_id int van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

De id voor het knooppunt waarop deze distributie zich bevindt.

Permissions

Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .

Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.

Machtigingen voor SQL Server 2022 en hoger

Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Opmerkingen

sys.dm_os_latch_stats kan worden gebruikt om de bron van de latch-contentie te identificeren door de relatieve wachttijden en wachttijden voor de verschillende latchklassen te onderzoeken. In sommige situaties kun je de aanslagstrijd mogelijk oplossen of verminderen. Er kunnen echter situaties zijn waarin u contact moet opnemen met de klantenservice van Microsoft.

Je kunt de inhoud van sys.dm_os_latch_stats resetten door het volgende te gebruiken DBCC SQLPERF :

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

Hiermee worden alle tellers opnieuw ingesteld op 0.

Opmerking

Deze statistieken blijven niet behouden als SQL Server opnieuw wordt opgestart. Alle gegevens zijn cumulatief sinds de laatste keer dat de statistieken opnieuw zijn ingesteld of sinds SQL Server is gestart.

Latches

Een latch is een intern lichtgewicht synchronisatieobject vergelijkbaar met een lock, dat wordt gebruikt door verschillende SQL Server-componenten. Een latch wordt voornamelijk gebruikt om databasepagina's te synchroniseren tijdens operaties zoals buffer- of bestandstoegang. Elke latch is gekoppeld aan één enkele toewijzingseenheid.

Een latch-wacht treedt op wanneer een latch-verzoek niet direct kan worden toegekend, omdat de latch wordt vastgehouden door een andere thread in een conflicterende modus. In tegenstelling tot sloten wordt een latch direct na de bewerking losgemaakt, zelfs bij schrijfoperaties.

Latches worden gegroepeerd in klassen op basis van componenten en gebruik. Nul of meer latches van een bepaalde klasse kunnen op elk moment bestaan in een instantie van SQL Server.

Opmerking

sys.dm_os_latch_stats Houdt geen latchverzoeken bij die direct zijn goedgekeurd, of die zonder wachttijd zijn mislukt.

De volgende tabel bevat korte beschrijvingen van de verschillende latch-klassen.

Sluitklasse Description
ALLOC_CREATE_RINGBUF Intern gebruikt door SQL Server om de synchronisatie van het creëren van een allocatieringbuffer te initialiseren.
ALLOC_CREATE_FREESPACE_CACHE Gebruikt om de synchronisatie van interne vrije ruimte caches voor heaps te initialiseren.
ALLOC_CACHE_MANAGER Gebruikt om interne coherentietests te synchroniseren.
ALLOC_FREESPACE_CACHE Gebruikt om de toegang tot een cache van pagina's te synchroniseren met beschikbare ruimte voor heaps en binaire grote objecten (BLOBs). Concurrentie op latches van deze klasse kan optreden wanneer meerdere verbindingen proberen rijen tegelijkertijd in een heap of BLOB in te voegen. Je kunt deze bewering verminderen door het object te partitioneren. Elke partitie heeft zijn eigen latch. Partitioneren zal de inserts over meerdere latches verdelen.
ALLOC_EXTENT_CACHE Gebruikt om de toegang te synchroniseren naar een cache van extents die pagina's bevat die niet zijn toegewezen. Concurrentie op latches van deze klasse kan optreden wanneer meerdere verbindingen proberen datapagina's tegelijk in dezelfde allocatie-eenheid toe te wijzen. Deze bewering kan worden verminderd door het object waarvan deze allocatie-eenheid deel uitmaakt te partitioneren.
ACCESS_METHODS_DATASET_PARENT Gebruikt om de toegang van de kinddataset te synchroniseren met de ouderdataset tijdens parallelle operaties.
ACCESS_METHODS_HOBT_FACTORY Gebruikt om toegang te synchroniseren naar een interne hashtabel.
ACCESS_METHODS_HOBT Gebruikt om toegang te synchroniseren naar de in-memory representatie van een HoBt.
ACCESS_METHODS_HOBT_COUNT Gebruikt om toegang te synchroniseren naar een HoBt-pagina en rijtellers.
ACCESS_METHODS_HOBT_VIRTUAL_ROOT Gebruikt om toegang te synchroniseren tot de root page-abstractie van een interne B-boom.
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC Gebruikt om toegang tot de werktafel te synchroniseren.
ACCESS_METHODS_BULK_ALLOC Gebruikt om toegang te synchroniseren binnen bulk allocators.
ACCESS_METHODS_SCAN_RANGE_GENERATOR Gebruikt om toegang tot een bereikgenerator te synchroniseren tijdens parallelle scans.
ACCESS_METHODS_KEY_RANGE_GENERATOR Gebruikt om toegang te synchroniseren naar read-ahead operaties tijdens parallelle scans van sleutelbereik.
APPEND_ONLY_STORAGE_INSERT_POINT Gebruikt om inserts te synchroniseren in snelle opslagunits die alleen aan toevoegingen kunnen worden gebruikt.
APPEND_ONLY_STORAGE_FIRST_ALLOC Gebruikt om de eerste toewijzing te synchroniseren voor een alleen append-only opslagunit.
APPEND_ONLY_STORAGE_UNIT_MANAGER Gebruikt voor interne synchronisatie van datastructuurtoegang binnen de snelle append-only storage unit manager.
APPEND_ONLY_STORAGE_MANAGER Gebruikt om krimpoperaties te synchroniseren in de snelle opslagunitbeheerder die alleen wordt toegevoegd.
BACKUP_RESULT_SET Gebruikt om parallelle back-upresultaten te synchroniseren.
BACKUP_TAPE_POOL Gebruikt om back-uptapepools te synchroniseren.
BACKUP_LOG_REDO Gebruikt om back-uplogherhalingsoperaties te synchroniseren.
BACKUP_INSTANCE_ID Gebruikt om de generatie van instance ID's voor back-up performance monitor-tellers te synchroniseren.
BACKUP_MANAGER Gebruikt om de interne back-upmanager te synchroniseren.
BACKUP_MANAGER_DIFFERENTIAL Gebruikt om differentiële back-upoperaties te synchroniseren met DBCC.
BACKUP_OPERATION Gebruikt voor interne synchronisatie van datastructuren binnen een back-upoperatie, zoals database-, log- of bestandsback-up.
BACKUP_FILE_HANDLE Gebruikt om bestandsopenoperaties te synchroniseren tijdens een hersteloperatie.
BUFFER Gebruikt om kortetermijntoegang tot databasepagina's te synchroniseren. Een buffer latch is vereist voordat men een databasepagina leest of bewerkt. Buffer latch contention kan wijzen op verschillende problemen, waaronder hot pages en trage I/O's.

Deze latch-cursus behandelt alle mogelijke toepassingen van page latches. sys.dm_os_wait_stats maakt het verschil tussen page latch-wachttijden die worden veroorzaakt door I/O-operaties en lees- en schrijfoperaties op de pagina.
BUFFER_POOL_GROW Gebruikt voor interne synchronisatie van bufferbeheerders tijdens bufferpool-groeioperaties.
DATABASE_CHECKPOINT Gebruikt om checkpoints binnen een database te serialiseren.
CLR_PROCEDURE_HASHTABLE Alleen intern gebruik.
CLR_UDX_STORE Alleen intern gebruik.
CLR_DATAT_ACCESS Alleen intern gebruik.
CLR_XVAR_PROXY_LIST Alleen intern gebruik.
DBCC_CHECK_AGGREGATE Alleen intern gebruik.
DBCC_CHECK_RESULTSET Alleen intern gebruik.
DBCC_CHECK_TABLE Alleen intern gebruik.
DBCC_CHECK_TABLE_INIT Alleen intern gebruik.
DBCC_CHECK_TRACE_LIST Alleen intern gebruik.
DBCC_FILE_CHECK_OBJECT Alleen intern gebruik.
DBCC_PERF Gebruikt om interne prestatiemonitortellers te synchroniseren.
DBCC_PFS_STATUS Alleen intern gebruik.
DBCC_OBJECT_METADATA Alleen intern gebruik.
DBCC_HASH_DLL Alleen intern gebruik.
EVENTING_CACHE Alleen intern gebruik.
FCB Gebruikt om toegang tot het bestandscontroleblok te synchroniseren.
FCB_REPLICA Alleen intern gebruik.
FGCB_ALLOC Gebruik om toegang te synchroniseren tot round robin-allocatie-informatie binnen een bestandsgroep.
FGCB_ADD_REMOVE Gebruik om toegang tot bestandsgroepen te synchroniseren voor toevoegen, verwijderen, laten groeien en verkleinen van bestanden.
FILEGROUP_MANAGER Alleen intern gebruik.
FILE_MANAGER Alleen intern gebruik.
FILESTREAM_FCB Alleen intern gebruik.
FILESTREAM_FILE_MANAGER Alleen intern gebruik.
FILESTREAM_GHOST_FILES Alleen intern gebruik.
FILESTREAM_DFS_ROOT Alleen intern gebruik.
LOG_MANAGER Alleen intern gebruik.
FULLTEXT_DOCUMENT_ID Alleen intern gebruik.
FULLTEXT_DOCUMENT_ID_TRANSACTION Alleen intern gebruik.
FULLTEXT_DOCUMENT_ID_NOTIFY Alleen intern gebruik.
FULLTEXT_LOGS Alleen intern gebruik.
FULLTEXT_CRAWL_LOG Alleen intern gebruik.
FULLTEXT_ADMIN Alleen intern gebruik.
FULLTEXT_AMDIN_COMMAND_CACHE Alleen intern gebruik.
FULLTEXT_LANGUAGE_TABLE Alleen intern gebruik.
FULLTEXT_CRAWL_DM_LIST Alleen intern gebruik.
FULLTEXT_CRAWL_CATALOG Alleen intern gebruik.
FULLTEXT_FILE_MANAGER Alleen intern gebruik.
DATABASE_MIRRORING_REDO Alleen intern gebruik.
DATABASE_MIRRORING_SERVER Alleen intern gebruik.
DATABASE_MIRRORING_CONNECTION Alleen intern gebruik.
DATABASE_MIRRORING_STREAM Alleen intern gebruik.
QUERY_OPTIMIZER_VD_MANAGER Alleen intern gebruik.
QUERY_OPTIMIZER_ID_MANAGER Alleen intern gebruik.
QUERY_OPTIMIZER_VIEW_REP Alleen intern gebruik.
RECOVERY_BAD_PAGE_TABLE Alleen intern gebruik.
RECOVERY_MANAGER Alleen intern gebruik.
SECURITY_OPERATION_RULE_TABLE Alleen intern gebruik.
SECURITY_OBJPERM_CACHE Alleen intern gebruik.
SECURITY_CRYPTO Alleen intern gebruik.
SECURITY_KEY_RING Alleen intern gebruik.
SECURITY_KEY_LIST Alleen intern gebruik.
SERVICE_BROKER_CONNECTION_RECEIVE Alleen intern gebruik.
SERVICE_BROKER_TRANSMISSION Alleen intern gebruik.
SERVICE_BROKER_TRANSMISSION_UPDATE Alleen intern gebruik.
SERVICE_BROKER_TRANSMISSION_STATE Alleen intern gebruik.
SERVICE_BROKER_TRANSMISSION_ERRORS Alleen intern gebruik.
SSBXmitWork Alleen intern gebruik.
SERVICE_BROKER_MESSAGE_TRANSMISSION Alleen intern gebruik.
SERVICE_BROKER_MAP_MANAGER Alleen intern gebruik.
SERVICE_BROKER_HOST_NAME Alleen intern gebruik.
SERVICE_BROKER_READ_CACHE Alleen intern gebruik.
SERVICE_BROKER_WAITFOR_MANAGER Gebruikt om een instance level map van wachtrijen te synchroniseren. Er bestaat één wachtrij per database-ID, databaseversie en wachtrij-ID-tuple. Concurrentie op latches van deze klasse kan optreden wanneer veel verbindingen zijn: In een WAITFOR(RECEIVE) wachttoestand; roepen WAITFOR(ONTVANGEN); overschrijdt de WACHT-timeout; een bericht ontvangen; het committen of terugrollen van de transactie die de WAITFOR(RECEIVE) bevat; Je kunt de contention verminderen door het aantal threads in een WAITFOR(RECEIVE) wachttoestand te verminderen.
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Alleen intern gebruik.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Alleen intern gebruik.
SERVICE_BROKER_TRANSPORT Alleen intern gebruik.
SERVICE_BROKER_MIRROR_ROUTE Alleen intern gebruik.
TRACE_ID Alleen intern gebruik.
TRACE_AUDIT_ID Alleen intern gebruik.
SPOOR Alleen intern gebruik.
TRACE_CONTROLLER Alleen intern gebruik.
TRACE_EVENT_QUEUE Alleen intern gebruik.
TRANSACTION_DISTRIBUTED_MARK Alleen intern gebruik.
TRANSACTION_OUTCOME Alleen intern gebruik.
NESTING_TRANSACTION_READONLY Alleen intern gebruik.
NESTING_TRANSACTION_FULL Alleen intern gebruik.
MSQL_TRANSACTION_MANAGER Alleen intern gebruik.
DATABASE_AUTONAME_MANAGER Alleen intern gebruik.
UTILITY_DYNAMIC_VECTOR Alleen intern gebruik.
UTILITY_SPARSE_BITMAP Alleen intern gebruik.
UTILITY_DATABASE_DROP Alleen intern gebruik.
UTILITY_DYNAMIC_MANAGER_VIEW Alleen intern gebruik.
UTILITY_DEBUG_FILESTREAM Alleen intern gebruik.
UTILITY_LOCK_INFORMATION Alleen intern gebruik.
VERSIONING_TRANSACTION Alleen intern gebruik.
VERSIONING_TRANSACTION_LIST Alleen intern gebruik.
VERSIONING_TRANSACTION_CHAIN Alleen intern gebruik.
VERSIONING_STATE Alleen intern gebruik.
VERSIONING_STATE_CHANGE Alleen intern gebruik.
KTM_VIRTUAL_CLOCK Alleen intern gebruik.

Opmerking

Documentatie maakt gebruik van de term B-tree in het algemeen in verwijzing naar indexen. In rowstore-indexen implementeert de Database Engine een B+ tree. Dit geldt niet voor columnstore-indexen of indexen voor tabellen die zijn geoptimaliseerd voor geheugen. Zie de SQL Server- en Azure SQL-indexarchitectuur en ontwerphandleidingvoor meer informatie.

Zie ook

DBCC SQLPERF (Transact-SQL)
Dynamische beheerweergaven van SQL Server-besturingssysteem (Transact-SQL)
SQL Server, Latches Object