sys.dm_os_latch_stats (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Возвращает сведения обо всех случаях ожидания кратковременных блокировок, систематизированных по классам.

Примечание.

Чтобы вызвать это из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_os_latch_stats. Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Имя столбца Тип данных Description
latch_class nvarchar(60) Имя класса кратковременных блокировок.
waiting_requests_count bigint Число ожиданий кратковременных блокировок в данном классе. Этот счетчик увеличивается в начале ожидания кратковременной блокировки.
wait_time_ms bigint Общее время ожидания кратковременных блокировок в данном классе в миллисекундах.

Примечание. Этот столбец обновляется каждые пять минут во время ожидания блокировки и в конце ожидания блокировки.
max_wait_time_ms bigint Максимальный период времени ожидания данной кратковременной блокировки объектом памяти. Если данное значение неестественно велико, это может указывать на взаимоблокировку.
pdw_node_id int Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)

Идентификатор узла, на который находится данное распределение.

Разрешения

На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE.

Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader##роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Замечания

Представление динамического управления sys.dm_os_latch_stats может быть использовано для выявления источника состязания между кратковременными блокировками путем исследования относительного числа ожиданий и времени ожидания для различных классов кратковременных блокировок. В некоторых ситуациях возможно устранение состязания между кратковременными блокировками или снижение его остроты. Однако могут возникнуть ситуации, в которых вам потребуется обратиться в службу поддержки клиентов Майкрософт.

Очистить содержимое представления sys.dm_os_latch_stats с помощью инструкции DBCC SQLPERF можно следующим образом.

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

В результате все счетчики будут обнулены.

Примечание.

Эта статистика не сохраняется при перезапуске SQL Server. Все данные являются накопительными с момента последнего сброса статистики или с момента запуска SQL Server.

Кратковременные блокировки

Блокировка — это внутренний упрощенный объект синхронизации, аналогичный блокировке, который используется различными компонентами SQL Server. Блокировка в основном используется для синхронизации страниц базы данных во время таких операций, как буфер или доступ к файлам. Каждая кратковременная блокировка ассоциируется с одной единицей распределения.

Ожидание кратковременной блокировки происходит в случаях, когда запрос на кратковременную блокировку не может быть удовлетворен немедленно, поскольку эта кратковременная блокировка удерживается другим потоком в конфликтующем режиме. В отличие от обычной блокировки, кратковременная блокировка высвобождается немедленно по завершении операции, даже если это операция записи.

Кратковременные блокировки группируются в классы по компонентам и по способам использования. Ноль или более блокировок определенного класса может существовать в любой момент времени в экземпляре SQL Server.

Примечание.

sys.dm_os_latch_stats не отслеживает запросы на блокировку, предоставленные немедленно или не ожидая.

В следующей таблице содержатся краткие описания различных классов кратковременных блокировок.

Класс кратковременных блокировок Description
ALLOC_CREATE_RINGBUF Используется внутренне SQL Server для инициализации синхронизации создания буфера кольца выделения.
ALLOC_CREATE_FREESPACE_CACHE Используется для инициализации синхронизации внутренних кэшей свободного пространства для куч.
ALLOC_CACHE_MANAGER Используется для синхронизации проверок внутренней связности.
ALLOC_FREESPACE_CACHE Используется для синхронизации доступа к кэшу страниц со свободным пространством для размещения куч и больших двоичных объектов (BLOBs). Состязание за доступ к кратковременным блокировкам этого класса может происходить в случаях, когда несколько соединений одновременно пытаются ввести строки в кучу или в BLOB. Снизить состязание можно с помощью секционирования соответствующего объекта. Каждая секция имеет собственную кратковременную блокировку. В ходе секционирования вставки будут распределены по нескольким кратковременным блокировкам.
ALLOC_EXTENT_CACHE Используется для синхронизации доступа к кэшу экстентов, который содержит нераспределенные страницы. Состязание за доступ к кратковременным блокировкам этого класса может происходить в случаях, когда несколько соединений одновременно пытаются выделить страницы данных в одну и ту же единицу распределения. Снизить состязание можно с помощью секционирования объекта, в состав которого входит данная единица распределения.
ACCESS_METHODS_DATASET_PARENT Используется для синхронизации доступа дочернего набора данных к родительскому набору данных при выполнении параллельных операций.
ACCESS_METHODS_HOBT_FACTORY Используется для синхронизации доступа к внутренней хэш-таблице.
ACCESS_METHODS_HOBT Используется для синхронизации доступа к хранимому в памяти представлению HoBt.
ACCESS_METHODS_HOBT_COUNT Используется для синхронизации доступа к памяти HoBt и к счетчикам строк.
ACCESS_METHODS_HOBT_VIRTUAL_ROOT Используется для синхронизации доступа к абстракции корневой страницы внутреннего сбалансированного дерева.
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC Используется для синхронизации доступа к рабочим таблицам.
ACCESS_METHODS_BULK_ALLOC Используется для синхронизации доступа между механизмами массового выделения пространства.
ACCESS_METHODS_SCAN_RANGE_GENERATOR Используется для синхронизации доступа к генератору диапазонов при выполнении параллельного сканирования.
ACCESS_METHODS_KEY_RANGE_GENERATOR Используется для синхронизации доступа к операциям упреждающего чтения при выполнении параллельного просмотра важнейших диапазонов.
APPEND_ONLY_STORAGE_INSERT_POINT Используется для синхронизации вставок в быстродействующие блоки памяти, заполняемые только путем присоединения новых записей.
APPEND_ONLY_STORAGE_FIRST_ALLOC Используется для синхронизации первого размещения в блоке памяти, заполняемом только путем присоединения новых записей.
APPEND_ONLY_STORAGE_UNIT_MANAGER Используется для синхронизации доступа к структурам внутренних данных внутри диспетчера быстродействующих блоков памяти, заполняемых только путем присоединения новых записей.
APPEND_ONLY_STORAGE_MANAGER Используется для синхронизации операций сжатия в диспетчере быстродействующих блоков памяти, заполняемых только путем присоединения новых записей.
BACKUP_RESULT_SET Используется для синхронизации параллельных резервных копий результирующих наборов.
BACKUP_TAPE_POOL Используется для синхронизации пулов лент резервных копий.
BACKUP_LOG_REDO Используется для синхронизации операций повтора журнала резервного копирования.
BACKUP_INSTANCE_ID Используется для синхронизации создания ID экземпляров счетчиков системного монитора резервного копирования.
BACKUP_MANAGER Используется для синхронизации внутреннего диспетчера резервного копирования.
BACKUP_MANAGER_DIFFERENTIAL Используется для синхронизации операций разностных резервных копий с DBCC.
BACKUP_OPERATION Используется для синхронизации внутренней структуры данных при проведении операций резервного копирования, таких как резервное копирование базы данных, журналов или файлов.
BACKUP_FILE_HANDLE Используется для синхронизации операций по открытию файлов при выполнении операций восстановления.
BUFFER Используется для синхронизации краткосрочного доступа к страницам баз данных. Кратковременная блокировка буфера необходима перед считыванием или модификацией любой страницы базы данных. Конфликт кратковременной блокировки буферов может указывать на наличие ряда проблем, в числе которых — «горячие» страницы и низкая производительность подсистемы ввода-вывода.

Этот класс кратковременных блокировок охватывает все возможные способы использования кратковременных блокировок страниц. sys.dm_os_wait_stats отличается от ожиданий блокировки страницы, вызванных операциями ввода-вывода и операциями чтения и записи на странице.
BUFFER_POOL_GROW Используется для синхронизации внутреннего диспетчера буферов при выполнении операций увеличения буферного пула.
DATABASE_CHECKPOINT Используется для сериализации контрольных точек внутри базы данных.
CLR_PROCEDURE_HASHTABLE Только для внутреннего применения.
CLR_UDX_STORE Только для внутреннего применения.
CLR_DATAT_ACCESS Только для внутреннего применения.
CLR_XVAR_PROXY_LIST Только для внутреннего применения.
DBCC_CHECK_AGGREGATE Только для внутреннего применения.
DBCC_CHECK_RESULTSET Только для внутреннего применения.
DBCC_CHECK_TABLE Только для внутреннего применения.
DBCC_CHECK_TABLE_INIT Только для внутреннего применения.
DBCC_CHECK_TRACE_LIST Только для внутреннего применения.
DBCC_FILE_CHECK_OBJECT Только для внутреннего применения.
DBCC_PERF Используется для синхронизации счетчиков внутреннего системного монитора.
DBCC_PFS_STATUS Только для внутреннего применения.
DBCC_OBJECT_METADATA Только для внутреннего применения.
DBCC_HASH_DLL Только для внутреннего применения.
EVENTING_CACHE Только для внутреннего применения.
FCB Используется для синхронизации доступа к блоку управления файлами.
FCB_REPLICA Только для внутреннего применения.
FGCB_ALLOC Используется для синхронизации доступа к данным, размещенным внутри файловой группы в порядке круговой очереди.
FGCB_ADD_REMOVE Используется для синхронизации доступа к файловой группе для операций добавления, удаления, увеличения и сжатия файлов.
FILEGROUP_MANAGER Только для внутреннего применения.
FILE_MANAGER Только для внутреннего применения.
FILESTREAM_FCB Только для внутреннего применения.
FILESTREAM_FILE_MANAGER Только для внутреннего применения.
FILESTREAM_GHOST_FILES Только для внутреннего применения.
FILESTREAM_DFS_ROOT Только для внутреннего применения.
LOG_MANAGER Только для внутреннего применения.
FULLTEXT_DOCUMENT_ID Только для внутреннего применения.
FULLTEXT_DOCUMENT_ID_TRANSACTION Только для внутреннего применения.
FULLTEXT_DOCUMENT_ID_NOTIFY Только для внутреннего применения.
FULLTEXT_LOGS Только для внутреннего применения.
FULLTEXT_CRAWL_LOG Только для внутреннего применения.
FULLTEXT_ADMIN Только для внутреннего применения.
FULLTEXT_AMDIN_COMMAND_CACHE Только для внутреннего применения.
FULLTEXT_LANGUAGE_TABLE Только для внутреннего применения.
FULLTEXT_CRAWL_DM_LIST Только для внутреннего применения.
FULLTEXT_CRAWL_CATALOG Только для внутреннего применения.
FULLTEXT_FILE_MANAGER Только для внутреннего применения.
DATABASE_MIRRORING_REDO Только для внутреннего применения.
DATABASE_MIRRORING_SERVER Только для внутреннего применения.
DATABASE_MIRRORING_CONNECTION Только для внутреннего применения.
DATABASE_MIRRORING_STREAM Только для внутреннего применения.
QUERY_OPTIMIZER_VD_MANAGER Только для внутреннего применения.
QUERY_OPTIMIZER_ID_MANAGER Только для внутреннего применения.
QUERY_OPTIMIZER_VIEW_REP Только для внутреннего применения.
RECOVERY_BAD_PAGE_TABLE Только для внутреннего применения.
RECOVERY_MANAGER Только для внутреннего применения.
SECURITY_OPERATION_RULE_TABLE Только для внутреннего применения.
SECURITY_OBJPERM_CACHE Только для внутреннего применения.
SECURITY_CRYPTO Только для внутреннего применения.
SECURITY_KEY_RING Только для внутреннего применения.
SECURITY_KEY_LIST Только для внутреннего применения.
SERVICE_BROKER_CONNECTION_RECEIVE Только для внутреннего применения.
SERVICE_BROKER_TRANSMISSION Только для внутреннего применения.
SERVICE_BROKER_TRANSMISSION_UPDATE Только для внутреннего применения.
SERVICE_BROKER_TRANSMISSION_STATE Только для внутреннего применения.
SERVICE_BROKER_TRANSMISSION_ERRORS Только для внутреннего применения.
SSBXmitWork Только для внутреннего применения.
SERVICE_BROKER_MESSAGE_TRANSMISSION Только для внутреннего применения.
SERVICE_BROKER_MAP_MANAGER Только для внутреннего применения.
SERVICE_BROKER_HOST_NAME Только для внутреннего применения.
SERVICE_BROKER_READ_CACHE Только для внутреннего применения.
SERVICE_BROKER_WAITFOR_MANAGER Используется для синхронизации карты уровня экземпляра очередей ожидания. Одна очередь существует для каждого идентификатора базы данных, версии базы данных и кортежа идентификатора очереди. Конфликты на блокировках этого класса могут возникать, когда много подключений: в состоянии ожидания WAITFOR(RECEIVE); вызов WAITFOR(RECEIVE); превышено время ожидания WAITFOR; получение сообщения; фиксация или откат транзакции, содержащей WAITFOR(RECEIVE); Можно уменьшить количество потоков в состоянии ожидания WAITFOR(RECEIVE).
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Только для внутреннего применения.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Только для внутреннего применения.
SERVICE_BROKER_TRANSPORT Только для внутреннего применения.
SERVICE_BROKER_MIRROR_ROUTE Только для внутреннего применения.
TRACE_ID Только для внутреннего применения.
TRACE_AUDIT_ID Только для внутреннего применения.
ТРАССИРОВКА Только для внутреннего применения.
TRACE_CONTROLLER Только для внутреннего применения.
TRACE_EVENT_QUEUE Только для внутреннего применения.
TRANSACTION_DISTRIBUTED_MARK Только для внутреннего применения.
TRANSACTION_OUTCOME Только для внутреннего применения.
NESTING_TRANSACTION_READONLY Только для внутреннего применения.
NESTING_TRANSACTION_FULL Только для внутреннего применения.
MSQL_TRANSACTION_MANAGER Только для внутреннего применения.
DATABASE_AUTONAME_MANAGER Только для внутреннего применения.
UTILITY_DYNAMIC_VECTOR Только для внутреннего применения.
UTILITY_SPARSE_BITMAP Только для внутреннего применения.
UTILITY_DATABASE_DROP Только для внутреннего применения.
UTILITY_DYNAMIC_MANAGER_VIEW Только для внутреннего применения.
UTILITY_DEBUG_FILESTREAM Только для внутреннего применения.
UTILITY_LOCK_INFORMATION Только для внутреннего применения.
VERSIONING_TRANSACTION Только для внутреннего применения.
VERSIONING_TRANSACTION_LIST Только для внутреннего применения.
VERSIONING_TRANSACTION_CHAIN Только для внутреннего применения.
VERSIONING_STATE Только для внутреннего применения.
VERSIONING_STATE_CHANGE Только для внутреннего применения.
KTM_VIRTUAL_CLOCK Только для внутреннего применения.

Примечание.

В документации по SQL Server термин "сбалансированное дерево" обычно используется в отношении индексов. В индексах rowstore SQL Server реализует B+-дерево. Это не относится к индексам columnstore или хранилищам данных в памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.

См. также

DBCC SQLPERF (Transact-SQL)
Динамические административные представления операционной системы SQL Server (Transact-SQL)
SQL Server, объект Latches