sys.dm_os_latch_stats (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Gibt Informationen zu allen nach Klassen sortierten Latchwartevorgängen zurück.
Hinweis
Um dies von Azure Synapse Analytics oder Analytics Platform System (PDW) aufzurufen, verwenden Sie den Namen sys.dm_pdw_nodes_os_latch_stats. Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
latch_class | nvarchar(60) | Name der Latchklasse. |
waiting_requests_count | bigint | Anzahl der Wartevorgänge auf Latches in dieser Klasse. Dieser Leistungsindikator wird beim Starten eines Latchwartevorgangs erhöht. |
wait_time_ms | bigint | Gesamtwartezeit auf Latches in dieser Klasse (in Millisekunden). Hinweis: Diese Spalte wird alle fünf Minuten während einer Latch-Wartezeit und am Ende einer Latch-Wartezeit aktualisiert. |
max_wait_time_ms | bigint | Maximale Zeitdauer, die ein Speicherobjekt auf diesen Latch gewartet hat. Wenn dieser Wert ungewöhnlich hoch ist, kann dies ein Hinweis auf einen internen Deadlock sein. |
pdw_node_id | int | Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW) Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet. |
Berechtigungen
Für SQL Server und SQL Managed Instance ist die VIEW SERVER STATE
-Berechtigung erforderlich.
Für die SQL-Datenbank-Ziele Basic, S0 und S1 sowie für Datenbanken in Pools für elastische Datenbanken ist das Konto des Serveradministrators oder des Microsoft Entra-Administratorkontos oder die Mitgliedschaft in der ##MS_ServerStateReader##
Serverrolle erforderlich. Für alle anderen SQL-Datenbank-Dienstziele ist entweder die VIEW DATABASE STATE
-Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader##
-Serverrolle erforderlich.
Berechtigungen für SQL Server 2022 und höher
Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.
Hinweise
sys.dm_os_latch_stats können verwendet werden, um die Quelle der Riegelungsverknügung zu identifizieren, indem die relativen Wartezeiten und Wartezeiten für die verschiedenen Latch-Klassen untersucht werden. In einigen Fällen können Sie Latchkonflikte möglicherweise lösen oder reduzieren. Es kann jedoch Situationen geben, in denen Sie sich an den Microsoft-Kundendienst wenden müssen.
Sie können den Inhalt von sys.dm_os_latch_stats DBCC SQLPERF
wie folgt zurücksetzen:
DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);
GO
Dadurch werden alle Leistungsindikatoren auf 0 zurückgesetzt.
Hinweis
Diese Statistiken werden nicht beibehalten, wenn SQL Server neu gestartet wird. Alle Daten sind seit dem letzten Zurücksetzen der Statistiken kumulativ oder seit dem Start von SQL Server.
Latches
Ein Riegel ist ein internes einfaches Synchronisierungsobjekt, das einer Sperre ähnelt, die von verschiedenen SQL Server-Komponenten verwendet wird. Ein Riegel wird in erster Linie verwendet, um Datenbankseiten während Vorgängen wie Puffer- oder Dateizugriff zu synchronisieren. Jedem Latch wird eine einzelne Zuordnungseinheit zugeordnet.
Ein Latchwartevorgang findet dann statt, wenn der Latch nicht sofort erteilt werden kann, da er von einem anderen Thread in einem in Konflikt stehenden Modus beansprucht wird. Im Gegensatz zu Sperren wird ein Latch unmittelbar nach dem Vorgang freigegeben, selbst bei Schreibvorgängen.
Latches werden nach Klassen gruppiert, die auf Komponenten und der Verwendung basieren. Null oder mehr Latches einer bestimmten Klasse können zu einem beliebigen Zeitpunkt in einer Instanz von SQL Server vorhanden sein.
Hinweis
sys.dm_os_latch_stats
verfolgt keine Verschlussanforderungen, die sofort gewährt wurden oder die ohne Warten fehlgeschlagen sind.
Die folgende Tabelle enthält kurze Beschreibungen der verschiedenen Latchklassen.
Latchklasse | Beschreibung |
---|---|
ALLOC_CREATE_RINGBUF | Wird intern von SQL Server verwendet, um die Synchronisierung der Erstellung eines Zuordnungsringpuffers zu initialisieren. |
ALLOC_CREATE_FREESPACE_CACHE | Wird verwendet, um die Synchronisierung interner Leerspeichercaches für Heaps zu initialisieren. |
ALLOC_CACHE_MANAGER | Wird zum Synchronisieren interner Kohärenztests verwendet. |
ALLOC_FREESPACE_CACHE | Wird zum Synchronisieren des Zugriffs auf einen Seitencache mit verfügbarem Speicher für Heaps und BLOBs (Binary Large Objects) verwendet. Konflikte bei Latches dieser Klasse können auftreten, wenn mehrere Verbindungen versuchen, gleichzeitig Zeilen in einen Heap oder ein BLOB einzufügen. Durch Partitionieren des Objekts sinkt das Konfliktrisiko. Jede Partition verfügt über einen eigenen Latch. Durch das Partitionieren werden die Einfügevorgänge auf mehrere Latches verteilt. |
ALLOC_EXTENT_CACHE | Wird zum Synchronisieren des Zugriffs auf einen Cache mit Blöcken verwendet, die nicht zugeordnete Seiten enthalten. Konflikte bei Latches dieser Klasse können auftreten, wenn mehrere Verbindungen versuchen, gleichzeitig in derselben Zuordnungseinheit Datenseiten zuzuordnen. Das Konfliktrisiko kann durch Partitionieren des Objekts, zu dem diese Zuordnungseinheit gehört, gesenkt werden. |
ACCESS_METHODS_DATASET_PARENT | Wird zum Synchronisieren des Zugriffs des untergeordneten Datasets auf das übergeordnete Dataset während paralleler Vorgänge verwendet. |
ACCESS_METHODS_HOBT_FACTORY | Wird zum Synchronisieren des Zugriffs auf eine interne Hashtabelle verwendet. |
ACCESS_METHODS_HOBT | Wird zum Synchronisieren des Zugriffs auf die speicherinterne Darstellung eines HoBts verwendet. |
ACCESS_METHODS_HOBT_COUNT | Wird zum Synchronisieren des Zugriffs auf HoBt-Seiten- und Zeilenleistungsindikatoren verwendet. |
ACCESS_METHODS_HOBT_VIRTUAL_ROOT | Wird zum Synchronisieren des Zugriffs auf die Stammseitenabstraktion einer internen B-Struktur verwendet. |
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC | Wird zum Synchronisieren des Zugriffs auf Arbeitstabellen verwendet. |
ACCESS_METHODS_BULK_ALLOC | Wird zum Synchronisieren des Zugriffs innerhalb von Massenzuordnungen verwendet. |
ACCESS_METHODS_SCAN_RANGE_GENERATOR | Wird zum Synchronisieren des Zugriffs auf einen Bereichgenerator während paralleler Scans verwendet. |
ACCESS_METHODS_KEY_RANGE_GENERATOR | Wird zum Synchronisieren des Zugriffs auf Read-Ahead-Vorgänge während paralleler Scans in Schlüsselbereichen verwendet. |
APPEND_ONLY_STORAGE_INSERT_POINT | Wird zum Synchronisieren von Einfügungen in schnellen Nur anhängen-Speichereinheiten verwendet. |
APPEND_ONLY_STORAGE_FIRST_ALLOC | Wird zum Synchronisieren der ersten Zuordnung für eine Nur anhängen-Speichereinheit verwendet. |
APPEND_ONLY_STORAGE_UNIT_MANAGER | Wird zum Synchronisieren des Zugriffs auf die interne Datenstruktur innerhalb der Verwaltung schneller Nur anhängen-Speichereinheiten verwendet. |
APPEND_ONLY_STORAGE_MANAGER | Wird zum Synchronisieren von Verkleinerungsvorgängen bei der Verwaltung schneller Nur anhängen-Speichereinheiten verwendet. |
BACKUP_RESULT_SET | Wird zum Synchronisieren paralleler Sicherungsresultsets verwendet. |
BACKUP_TAPE_POOL | Wird zum Synchronisieren von Pools mit Sicherungsbändern verwendet. |
BACKUP_LOG_REDO | Wird zum Synchronisieren von Wiederholungsvorgängen für Sicherungsprotokolle verwendet. |
BACKUP_INSTANCE_ID | Wird zum Synchronisieren der Generierung von Instanz-IDs für Sicherungsleistungsindikatoren verwendet. |
BACKUP_MANAGER | Wird zum Synchronisieren des internen Sicherungs-Managers verwendet. |
BACKUP_MANAGER_DIFFERENTIAL | Wird zum Synchronisieren differenzieller Sicherungsvorgänge mit DBCC verwendet. |
BACKUP_OPERATION | Wird für die interne Datenstruktursynchronisierung in einem Sicherungsvorgang verwendet, wie z. B. in einer Datenbank-, Protokoll- oder Dateisicherung. |
BACKUP_FILE_HANDLE | Wird zum Synchronisieren von Vorgängen zum Öffnen von Dateien während einer Wiederherstellung verwendet. |
BUFFER | Wird zum Synchronisieren des kurzfristigen Zugriffs auf Datenbankseiten verwendet. Vor dem Lesen oder Ändern von Datenbankseiten ist ein Pufferlatch erforderlich. Pufferlatchkonflikte können ein Hinweis auf unterschiedliche Probleme sein, darunter Hotpages und langsame E/A-Vorgänge. Diese Latchklasse umfasst alle möglichen Verwendungen von Seitenlatches. sys.dm_os_wait_stats macht einen Unterschied zwischen Seiten latch-Wartezeiten, die durch E/A-Vorgänge und Lese- und Schreibvorgänge auf der Seite verursacht werden. |
BUFFER_POOL_GROW | Wird für die Synchronisierung des internen Puffer-Managers während Erweiterungen des Pufferpools verwendet. |
DATABASE_CHECKPOINT | Wird für die Serialisierung von Prüfpunkten in einer Datenbank verwendet. |
CLR_PROCEDURE_HASHTABLE | Nur zur internen Verwendung. |
CLR_UDX_STORE | Nur zur internen Verwendung. |
CLR_DATAT_ACCESS | Nur zur internen Verwendung. |
CLR_XVAR_PROXY_LIST | Nur zur internen Verwendung. |
DBCC_CHECK_AGGREGATE | Nur zur internen Verwendung. |
DBCC_CHECK_RESULTSET | Nur zur internen Verwendung. |
DBCC_CHECK_TABLE | Nur zur internen Verwendung. |
DBCC_CHECK_TABLE_INIT | Nur zur internen Verwendung. |
DBCC_CHECK_TRACE_LIST | Nur zur internen Verwendung. |
DBCC_FILE_CHECK_OBJECT | Nur zur internen Verwendung. |
DBCC_PERF | Wird zum Synchronisieren interner Leistungsindikatoren verwendet. |
DBCC_PFS_STATUS | Nur zur internen Verwendung. |
DBCC_OBJECT_METADATA | Nur zur internen Verwendung. |
DBCC_HASH_DLL | Nur zur internen Verwendung. |
EVENTING_CACHE | Nur zur internen Verwendung. |
FCB | Wird zum Synchronisieren des Zugriffs auf den Dateikontrollblock verwendet. |
FCB_REPLICA | Nur zur internen Verwendung. |
FGCB_ALLOC | Wird zum Synchronisieren des Zugriffs auf Roundrobin-Zuordnungsinformationen in einer Dateigruppe verwendet. |
FGCB_ADD_REMOVE | Dient zum Synchronisieren des Zugriffs auf Dateigruppen zum Hinzufügen, Ablegen, Vergrößern und Verkleinern von Dateivorgängen. |
FILEGROUP_MANAGER | Nur zur internen Verwendung. |
FILE_MANAGER | Nur zur internen Verwendung. |
FILESTREAM_FCB | Nur zur internen Verwendung. |
FILESTREAM_FILE_MANAGER | Nur zur internen Verwendung. |
FILESTREAM_GHOST_FILES | Nur zur internen Verwendung. |
FILESTREAM_DFS_ROOT | Nur zur internen Verwendung. |
LOG_MANAGER | Nur zur internen Verwendung. |
FULLTEXT_DOCUMENT_ID | Nur zur internen Verwendung. |
FULLTEXT_DOCUMENT_ID_TRANSACTION | Nur zur internen Verwendung. |
FULLTEXT_DOCUMENT_ID_NOTIFY | Nur zur internen Verwendung. |
FULLTEXT_LOGS | Nur zur internen Verwendung. |
FULLTEXT_CRAWL_LOG | Nur zur internen Verwendung. |
FULLTEXT_ADMIN | Nur zur internen Verwendung. |
FULLTEXT_AMDIN_COMMAND_CACHE | Nur zur internen Verwendung. |
FULLTEXT_LANGUAGE_TABLE | Nur zur internen Verwendung. |
FULLTEXT_CRAWL_DM_LIST | Nur zur internen Verwendung. |
FULLTEXT_CRAWL_CATALOG | Nur zur internen Verwendung. |
FULLTEXT_FILE_MANAGER | Nur zur internen Verwendung. |
DATABASE_MIRRORING_REDO | Nur zur internen Verwendung. |
DATABASE_MIRRORING_SERVER | Nur zur internen Verwendung. |
DATABASE_MIRRORING_CONNECTION | Nur zur internen Verwendung. |
DATABASE_MIRRORING_STREAM | Nur zur internen Verwendung. |
QUERY_OPTIMIZER_VD_MANAGER | Nur zur internen Verwendung. |
QUERY_OPTIMIZER_ID_MANAGER | Nur zur internen Verwendung. |
QUERY_OPTIMIZER_VIEW_REP | Nur zur internen Verwendung. |
RECOVERY_BAD_PAGE_TABLE | Nur zur internen Verwendung. |
RECOVERY_MANAGER | Nur zur internen Verwendung. |
SECURITY_OPERATION_RULE_TABLE | Nur zur internen Verwendung. |
SECURITY_OBJPERM_CACHE | Nur zur internen Verwendung. |
SECURITY_CRYPTO | Nur zur internen Verwendung. |
SECURITY_KEY_RING | Nur zur internen Verwendung. |
SECURITY_KEY_LIST | Nur zur internen Verwendung. |
SERVICE_BROKER_CONNECTION_RECEIVE | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSMISSION | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSMISSION_UPDATE | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSMISSION_STATE | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSMISSION_ERRORS | Nur zur internen Verwendung. |
SSBXmitWork | Nur zur internen Verwendung. |
SERVICE_BROKER_MESSAGE_TRANSMISSION | Nur zur internen Verwendung. |
SERVICE_BROKER_MAP_MANAGER | Nur zur internen Verwendung. |
SERVICE_BROKER_HOST_NAME | Nur zur internen Verwendung. |
SERVICE_BROKER_READ_CACHE | Nur zur internen Verwendung. |
SERVICE_BROKER_WAITFOR_MANAGER | Wird verwendet, um eine Instanzebenenzuordnung von Warteschleifen zu synchronisieren. Pro Datenbank-ID, Datenbankversion und Warteschlangen-ID-Tupel ist eine Warteschlange vorhanden. Es kann vorkommen, dass die Klammern dieser Klasse auftreten können, wenn viele Verbindungen vorhanden sind: In einem WAITFOR(RECEIVE)-Wartezustand; AUFRUFEN VON WAITFOR(RECEIVE); überschreiten des WAITFOR-Timeouts; Empfangen einer Nachricht; Commit oder Rollback der Transaktion, die die WAITFOR(RECEIVE) enthält; Sie können den Inhalt reduzieren, indem Sie die Anzahl der Threads in einem WAITFOR(RECEIVE)-Wartezustand verringern. |
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA | Nur zur internen Verwendung. |
SERVICE_BROKER_TRANSPORT | Nur zur internen Verwendung. |
SERVICE_BROKER_MIRROR_ROUTE | Nur zur internen Verwendung. |
TRACE_ID | Nur zur internen Verwendung. |
TRACE_AUDIT_ID | Nur zur internen Verwendung. |
TRACE | Nur zur internen Verwendung. |
TRACE_CONTROLLER | Nur zur internen Verwendung. |
TRACE_EVENT_QUEUE | Nur zur internen Verwendung. |
TRANSACTION_DISTRIBUTED_MARK | Nur zur internen Verwendung. |
TRANSACTION_OUTCOME | Nur zur internen Verwendung. |
NESTING_TRANSACTION_READONLY | Nur zur internen Verwendung. |
NESTING_TRANSACTION_FULL | Nur zur internen Verwendung. |
MSQL_TRANSACTION_MANAGER | Nur zur internen Verwendung. |
DATABASE_AUTONAME_MANAGER | Nur zur internen Verwendung. |
UTILITY_DYNAMIC_VECTOR | Nur zur internen Verwendung. |
UTILITY_SPARSE_BITMAP | Nur zur internen Verwendung. |
UTILITY_DATABASE_DROP | Nur zur internen Verwendung. |
UTILITY_DYNAMIC_MANAGER_VIEW | Nur zur internen Verwendung. |
UTILITY_DEBUG_FILESTREAM | Nur zur internen Verwendung. |
UTILITY_LOCK_INFORMATION | Nur zur internen Verwendung. |
VERSIONING_TRANSACTION | Nur zur internen Verwendung. |
VERSIONING_TRANSACTION_LIST | Nur zur internen Verwendung. |
VERSIONING_TRANSACTION_CHAIN | Nur zur internen Verwendung. |
VERSIONING_STATE | Nur zur internen Verwendung. |
VERSIONING_STATE_CHANGE | Nur zur internen Verwendung. |
KTM_VIRTUAL_CLOCK | Nur zur internen Verwendung. |
Hinweis
In der Dokumentation wird der Begriff „B-Struktur“ im Allgemeinen in Bezug auf Indizes verwendet. In Zeilenspeicherindizes implementiert die Datenbank-Engine eine B+-Struktur. Dies gilt nicht für Columnstore-Indizes oder In-Memory-Datenspeicher. Weitere Informationen finden Sie im Leitfaden zur Architektur und zum Entwerfen von SQL Server- und Azure SQL-Indizes.
Weitere Informationen
DBCC SQLPERF (Transact-SQL)
Dynamische Verwaltungssichten in Verbindung mit dem SQL Server-Betriebssystem (Transact-SQL)
SQL Server, Latches-Objekt