sys.dm_os_latch_stats (Transact-SQL)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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 | Только для внутреннего применения. |
Примечание.
В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
См. также
DBCC SQLPERF (Transact-SQL)
Динамические административные представления операционной системы SQL Server (Transact-SQL)
SQL Server, объект Latches