Поделиться через


sys.dm_os_latch_stats (Transact-SQL)

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsСистема аналитической платформы (PDW)SQL база данных в Microsoft Fabric

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

Примечание.

Чтобы вызвать это из 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 Только для внутреннего применения.

Примечание.

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

См. также

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