Udostępnij za pomocą


sys.dm_os_latch_stats (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Zwraca informacje o wszystkich oczekiwaniach na zatrzasku, uporządkowanych według klas.

Uwaga / Notatka

Aby wywołać to z Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_os_latch_stats. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Nazwa kolumny Typ danych Description
latch_class nvarchar(60) Nazwa klasy z zatrzaskiem.
waiting_requests_count bigint Liczba oczekiwań na zatrzaskach w tej klasie. Ten licznik jest zwiększany na początku czekania na zatrzask.
wait_time_ms bigint Całkowity czas oczekiwania, w milisekundach, na zatrzaskach w tej klasie.

Nuta: Ta kolumna jest aktualizowana co pięć minut podczas oczekiwania na zatrzask oraz na jego zakończenie.
max_wait_time_ms bigint Maksymalny czas, przez jaki obiekt pamięci czekał na tym zatrzasku. Jeśli ta wartość jest wyjątkowo wysoka, może to wskazywać na wewnętrzne zacięcie.
pdw_node_id int Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW)

Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

Permissions

W programie SQL Server i usłudze SQL Managed Instance wymagane jest VIEW SERVER STATE uprawnienie.

W przypadku celów usługi SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.

Uwagi

sys.dm_os_latch_stats można wykorzystać do identyfikacji źródła zatrzasku, analizując względne liczby oczekiwania i czasy oczekiwania dla różnych klas zatrzasku. W niektórych sytuacjach możesz rozwiązać lub zmniejszyć konflikt z zatrzaskami. Mogą jednak wystąpić sytuacje, w których konieczne będzie skontaktowanie się z pomocą techniczną firmy Microsoft.

Możesz zresetować zawartość sys.dm_os_latch_stats, używając DBCC SQLPERF następująco:

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

Spowoduje to zresetowanie wszystkich liczników do 0.

Uwaga / Notatka

Te statystyki nie są utrwalane, jeśli program SQL Server zostanie uruchomiony ponownie. Wszystkie dane są skumulowane od czasu ostatniego zresetowania statystyk lub od czasu uruchomienia programu SQL Server.

Latches

Zatrzaska to wewnętrzny, lekki obiekt synchronizacji podobny do zamka, używany przez różne komponenty SQL Server. Latch służy głównie do synchronizacji stron bazy danych podczas operacji, takich jak dostęp do bufora lub plików. Każdy zatrzask jest powiązany z jedną jednostką alokacyjną.

Oczekiwanie na zgadek występuje, gdy żądanie blokady nie może być natychmiast zatwierdzone, ponieważ zatrzaska jest utrzymywana przez inny wątek w trybie konfliktowym. W przeciwieństwie do blokad, zatrzask jest zwalniany natychmiast po operacji, nawet podczas operacji zapisu.

Latchy są grupowane w klasy na podstawie komponentów i użytkowania. W dowolnym momencie instancji SQL Servera może istnieć zero lub więcej zatrzasków danej klasy.

Uwaga / Notatka

sys.dm_os_latch_stats Nie śledzi żądań zatrzasku, które zostały przyznane natychmiast lub które nie powiodły się bez oczekiwania.

Poniższa tabela zawiera krótkie opisy różnych klas zatrzasków.

Klasa zatrzaskowa Description
ALLOC_CREATE_RINGBUF Używany wewnętrznie przez SQL Server do inicjalizacji synchronizacji tworzenia bufora pierścienia alokacji.
ALLOC_CREATE_FREESPACE_CACHE Używany do inicjalizacji synchronizacji wewnętrznych wolnych pamięci podręcznych dla kopców.
ALLOC_CACHE_MANAGER Używane do synchronizacji wewnętrznych testów spójności.
ALLOC_FREESPACE_CACHE Używany do synchronizacji dostępu do pamięci podręcznej stron z dostępną przestrzenią dla stert i binarnych dużych obiektów (BLOB). Rywalizacja na zatrzaskach tej klasy może wystąpić, gdy wiele połączeń próbuje jednocześnie wstawić wiersze do sterty lub BLOB. Możesz zmniejszyć ten spor, partycjonując obiekt. Każda partycja ma własny zatrzask (snapchat). Podział na particje rozłoży wstawki na wiele zatrzasków.
ALLOC_EXTENT_CACHE Używany do synchronizacji dostępu do pamięci podręcznej zakresów, która zawiera strony nieprzydzielone. Rywalizacja na zatrzaskach tej klasy może wystąpić, gdy wiele połączeń próbuje jednocześnie przydzielić strony danych do tej samej jednostki alokacji. To spory można zmniejszyć, dzieląc obiekt, którego częścią jest ta jednostka alokacji.
ACCESS_METHODS_DATASET_PARENT Używany do synchronizacji dostępu do potomnego zbioru danych z nadrzędnym zbiorem danych podczas operacji równoległych.
ACCESS_METHODS_HOBT_FACTORY Używany do synchronizacji dostępu do wewnętrznej tabeli skrótów.
ACCESS_METHODS_HOBT Używany do synchronizacji dostępu do reprezentacji w pamięci HoBt.
ACCESS_METHODS_HOBT_COUNT Używany do synchronizacji dostępu do strony HoBt i liczników wierszy.
ACCESS_METHODS_HOBT_VIRTUAL_ROOT Używany do synchronizacji dostępu do abstrakcji strony głównej wewnętrznego drzewa B.
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC Używany do synchronizacji dostępu do stołu roboczego.
ACCESS_METHODS_BULK_ALLOC Używany do synchronizacji dostępu w ramach alokatorów masowych.
ACCESS_METHODS_SCAN_RANGE_GENERATOR Używany do synchronizacji dostępu do generatora zasięgu podczas skanów równoległych.
ACCESS_METHODS_KEY_RANGE_GENERATOR Używany do synchronizacji dostępu do operacji odczytu przed odczytem podczas skanowania równoległego zakresu kluczy.
APPEND_ONLY_STORAGE_INSERT_POINT Używany do synchronizacji insertów w szybkich jednostkach pamięci masowej tylko z dodatkami.
APPEND_ONLY_STORAGE_FIRST_ALLOC Używany do synchronizacji pierwszej alokacji dla jednostki pamięci mającej tylko do dołączania.
APPEND_ONLY_STORAGE_UNIT_MANAGER Używany do synchronizacji dostępu do wewnętrznych struktur danych w szybkim menedżerze jednostek pamięci masowej, który działa tylko na dodawanie.
APPEND_ONLY_STORAGE_MANAGER Używany do synchronizacji operacji kurczenia w szybkim menedżerze jednostek pamięci masowej, który jest tylko do dodawania.
BACKUP_RESULT_SET Używany do synchronizacji równoległych zestawów wyników kopii zapasowych.
BACKUP_TAPE_POOL Używany do synchronizacji zapasowych pul taśm.
BACKUP_LOG_REDO Używany do synchronizacji operacji powtarzania logów kopii zapasowej.
BACKUP_INSTANCE_ID Używany do synchronizacji generowania identyfikatorów instancji dla liczników monitoringu wydajności zapasowej.
BACKUP_MANAGER Używa się do synchronizacji wewnętrznego menedżera kopii zapasowych.
BACKUP_MANAGER_DIFFERENTIAL Używany do synchronizacji operacji różnicowych kopii zapasowych z DBCC.
BACKUP_OPERATION Wykorzystywane do wewnętrznej synchronizacji struktur danych w operacji tworzenia kopii zapasowej, takich jak kopia zapasowa baz danych, logów lub plików.
BACKUP_FILE_HANDLE Używany do synchronizacji operacji otwierania plików podczas operacji przywracania.
BUFOR Używany do synchronizacji krótkoterminowego dostępu do stron bazy danych. Przed odczytem lub modyfikacją jakiejkolwiek strony bazy danych wymagany jest zatrzask bufora. Konkurencja w zatrzasku bufora może wskazywać na kilka problemów, w tym na gorące strony i wolne operacje I/O.

Ta klasa zatrzasków obejmuje wszystkie możliwe zastosowania zatrzasków stron. sys.dm_os_wait_stats robi różnicę między oczekiwaniami na zatrzaskowanie strony spowodowanymi operacjami I/O a operacjami odczytu i zapisu na stronie.
BUFFER_POOL_GROW Używany do synchronizacji wewnętrznego menedżera podczas operacji wzrostu puli.
DATABASE_CHECKPOINT Używany do serializacji punktów kontrolnych w bazie danych.
CLR_PROCEDURE_HASHTABLE Tylko do użytku wewnętrznego.
CLR_UDX_STORE Tylko do użytku wewnętrznego.
CLR_DATAT_ACCESS Tylko do użytku wewnętrznego.
CLR_XVAR_PROXY_LIST Tylko do użytku wewnętrznego.
DBCC_CHECK_AGGREGATE Tylko do użytku wewnętrznego.
DBCC_CHECK_RESULTSET Tylko do użytku wewnętrznego.
DBCC_CHECK_TABLE Tylko do użytku wewnętrznego.
DBCC_CHECK_TABLE_INIT Tylko do użytku wewnętrznego.
DBCC_CHECK_TRACE_LIST Tylko do użytku wewnętrznego.
DBCC_FILE_CHECK_OBJECT Tylko do użytku wewnętrznego.
DBCC_PERF Używany do synchronizacji wewnętrznych liczników monitorów wydajności.
DBCC_PFS_STATUS Tylko do użytku wewnętrznego.
DBCC_OBJECT_METADATA Tylko do użytku wewnętrznego.
DBCC_HASH_DLL Tylko do użytku wewnętrznego.
EVENTING_CACHE Tylko do użytku wewnętrznego.
FCB Używany do synchronizacji dostępu do bloku kontroli plików.
FCB_REPLICA Tylko do użytku wewnętrznego.
FGCB_ALLOC Służy do synchronizacji dostępu do informacji o alokacji round robin w grupie plików.
FGCB_ADD_REMOVE Używa się do synchronizacji dostępu do grup plików do operacji dodawania, usuwania, powiększania i zmniejszania plików.
FILEGROUP_MANAGER Tylko do użytku wewnętrznego.
FILE_MANAGER Tylko do użytku wewnętrznego.
FILESTREAM_FCB Tylko do użytku wewnętrznego.
FILESTREAM_FILE_MANAGER Tylko do użytku wewnętrznego.
FILESTREAM_GHOST_FILES Tylko do użytku wewnętrznego.
FILESTREAM_DFS_ROOT Tylko do użytku wewnętrznego.
LOG_MANAGER Tylko do użytku wewnętrznego.
FULLTEXT_DOCUMENT_ID Tylko do użytku wewnętrznego.
FULLTEXT_DOCUMENT_ID_TRANSACTION Tylko do użytku wewnętrznego.
FULLTEXT_DOCUMENT_ID_NOTIFY Tylko do użytku wewnętrznego.
FULLTEXT_LOGS Tylko do użytku wewnętrznego.
FULLTEXT_CRAWL_LOG Tylko do użytku wewnętrznego.
FULLTEXT_ADMIN Tylko do użytku wewnętrznego.
FULLTEXT_AMDIN_COMMAND_CACHE Tylko do użytku wewnętrznego.
FULLTEXT_LANGUAGE_TABLE Tylko do użytku wewnętrznego.
FULLTEXT_CRAWL_DM_LIST Tylko do użytku wewnętrznego.
FULLTEXT_CRAWL_CATALOG Tylko do użytku wewnętrznego.
FULLTEXT_FILE_MANAGER Tylko do użytku wewnętrznego.
DATABASE_MIRRORING_REDO Tylko do użytku wewnętrznego.
DATABASE_MIRRORING_SERVER Tylko do użytku wewnętrznego.
DATABASE_MIRRORING_CONNECTION Tylko do użytku wewnętrznego.
DATABASE_MIRRORING_STREAM Tylko do użytku wewnętrznego.
QUERY_OPTIMIZER_VD_MANAGER Tylko do użytku wewnętrznego.
QUERY_OPTIMIZER_ID_MANAGER Tylko do użytku wewnętrznego.
QUERY_OPTIMIZER_VIEW_REP Tylko do użytku wewnętrznego.
RECOVERY_BAD_PAGE_TABLE Tylko do użytku wewnętrznego.
RECOVERY_MANAGER Tylko do użytku wewnętrznego.
SECURITY_OPERATION_RULE_TABLE Tylko do użytku wewnętrznego.
SECURITY_OBJPERM_CACHE Tylko do użytku wewnętrznego.
SECURITY_CRYPTO Tylko do użytku wewnętrznego.
SECURITY_KEY_RING Tylko do użytku wewnętrznego.
SECURITY_KEY_LIST Tylko do użytku wewnętrznego.
SERVICE_BROKER_CONNECTION_RECEIVE Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSMISSION Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSMISSION_UPDATE Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSMISSION_STATE Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSMISSION_ERRORS Tylko do użytku wewnętrznego.
SSBXmitWork Tylko do użytku wewnętrznego.
SERVICE_BROKER_MESSAGE_TRANSMISSION Tylko do użytku wewnętrznego.
SERVICE_BROKER_MAP_MANAGER Tylko do użytku wewnętrznego.
SERVICE_BROKER_HOST_NAME Tylko do użytku wewnętrznego.
SERVICE_BROKER_READ_CACHE Tylko do użytku wewnętrznego.
SERVICE_BROKER_WAITFOR_MANAGER Używany do synchronizacji mapy kolejek oczekiwania na poziomie instancji. Istnieje jedna kolejka na identyfikator bazy danych, wersję bazy danych oraz krotkę identyfikatora kolejki. Rywalizacja na zatrzaskach tej klasy może wystąpić, gdy wiele połączeń to: W stanie oczekiwania WAITFOR(RECEIVE); wołanie WAITFOR(RECEIVE); przekroczenie czasu WAITFOR timeout; otrzymanie wiadomości; zatwierdzanie lub cofanie transakcji zawierającej WAITFOR(RECEIVE); Możesz zmniejszyć sporność, zmniejszając liczbę wątków w stanie oczekiwania WAITFOR(RECEIVE).
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Tylko do użytku wewnętrznego.
SERVICE_BROKER_TRANSPORT Tylko do użytku wewnętrznego.
SERVICE_BROKER_MIRROR_ROUTE Tylko do użytku wewnętrznego.
TRACE_ID Tylko do użytku wewnętrznego.
TRACE_AUDIT_ID Tylko do użytku wewnętrznego.
TRACE Tylko do użytku wewnętrznego.
TRACE_CONTROLLER Tylko do użytku wewnętrznego.
TRACE_EVENT_QUEUE Tylko do użytku wewnętrznego.
TRANSACTION_DISTRIBUTED_MARK Tylko do użytku wewnętrznego.
TRANSACTION_OUTCOME Tylko do użytku wewnętrznego.
NESTING_TRANSACTION_READONLY Tylko do użytku wewnętrznego.
NESTING_TRANSACTION_FULL Tylko do użytku wewnętrznego.
MSQL_TRANSACTION_MANAGER Tylko do użytku wewnętrznego.
DATABASE_AUTONAME_MANAGER Tylko do użytku wewnętrznego.
UTILITY_DYNAMIC_VECTOR Tylko do użytku wewnętrznego.
UTILITY_SPARSE_BITMAP Tylko do użytku wewnętrznego.
UTILITY_DATABASE_DROP Tylko do użytku wewnętrznego.
UTILITY_DYNAMIC_MANAGER_VIEW Tylko do użytku wewnętrznego.
UTILITY_DEBUG_FILESTREAM Tylko do użytku wewnętrznego.
UTILITY_LOCK_INFORMATION Tylko do użytku wewnętrznego.
VERSIONING_TRANSACTION Tylko do użytku wewnętrznego.
VERSIONING_TRANSACTION_LIST Tylko do użytku wewnętrznego.
VERSIONING_TRANSACTION_CHAIN Tylko do użytku wewnętrznego.
VERSIONING_STATE Tylko do użytku wewnętrznego.
VERSIONING_STATE_CHANGE Tylko do użytku wewnętrznego.
KTM_VIRTUAL_CLOCK Tylko do użytku wewnętrznego.

Uwaga / Notatka

W dokumentacji jest zwykle używany termin B-tree w odniesieniu do indeksów. W indeksach typu rowstore silnik bazy danych implementuje drzewo B+. Nie dotyczy to indeksów magazynu kolumn ani indeksów w tabelach zoptymalizowanych pod kątem pamięci. Aby uzyskać więcej informacji, zobacz architekturę i przewodnik projektowania indeksu SQL Server i Azure SQL.

Zobacz też

DBCC SQLPERF (Transact-SQL)
Dynamiczne widoki zarządzania związane z systemem operacyjnym PROGRAMU SQL Server (Transact-SQL)
SQL Server, Latches Object