sys.dm_os_latch_stats (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Retourne des informations sur toutes les attentes de verrou interne, organisées par classe.

Remarque

Pour appeler cela à partir d’Azure Synapse Analytics ou du système de plateforme d’analyse (PDW), utilisez le nom sys.dm_pdw_nodes_os_latch_stats. Cette syntaxe n’est pas prise en charge par le pool SQL serverless dans Azure Synapse Analytics.

Nom de la colonne Type de données Description
latch_class nvarchar(60) Nom de la classe de verrou interne.
waiting_requests_count bigint Nombre d'attentes pour les verrous internes de cette classe. Ce compteur est incrémenté au début d'une attente de verrou interne.
wait_time_ms bigint Temps d'attente total sur les verrous internes de cette classe, en millisecondes.

Remarque : cette colonne est mise à jour toutes les cinq minutes pendant une attente de verrou et à la fin d’une attente de verrou.
max_wait_time_ms bigint Durée maximum d'attente d'un objet de mémoire sur ce verrou interne. Si cette valeur est anormalement élevée, cela peut indiquer un blocage interne.
pdw_node_id int S’applique à : Azure Synapse Analytics, Analytics Platform System (PDW)

Identificateur du nœud sur lequel cette distribution est activée.

Autorisations

Sur SQL Server et SQL Managed Instance, l’autorisation VIEW SERVER STATE est requise.

Sur les objectifs de service SQL Database Basic, S0 et S1, et pour les bases de données dans des pools élastiques, le compte d’administrateur du serveur, le compte d’administrateur Microsoft Entra ou l’appartenance au ##MS_ServerStateReader##rôle serveur est requis. Sur tous les autres objectifs de service SQL Database, l’autorisation VIEW DATABASE STATE sur la base de données ou l’appartenance au rôle serveur ##MS_ServerStateReader## est requise.

Autorisations pour SQL Server 2022 (et versions plus récentes)

Nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.

Notes

sys.dm_os_latch_stats peut être utilisé pour identifier l'origine d'une contention de verrouillage en examinant le nombre d'attentes et les temps d'attente relatifs pour les différentes classes de verrous internes. Dans certaines situations, vous pouvez être en mesure de résoudre ou de réduire les problèmes de contention de verrouillage. Toutefois, il peut y avoir des situations qui vous obligeront à contacter les services de support technique Microsoft.

Vous pouvez réinitialiser le contenu de sys.dm_os_latch_stats en utilisant DBCC SQLPERF de la manière suivante :

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

Cette commande remet tous les compteurs à 0.

Remarque

Ces statistiques ne sont pas conservées si SQL Server est redémarré. Toutes les données sont cumulatives depuis la dernière réinitialisation des statistiques ou depuis le démarrage de SQL Server.

Verrous internes

Un verrou est un objet de synchronisation léger interne similaire à un verrou, utilisé par différents composants SQL Server. Un verrou est principalement utilisé pour synchroniser les pages de base de données pendant les opérations telles que la mémoire tampon ou l’accès aux fichiers. Chaque verrou interne est associé à une seule unité d'allocation.

Une attente de verrou interne se produit lorsqu'une demande de verrou interne ne peut pas être satisfaite immédiatement parce que le verrou en question est détenu par un autre thread qui crée une situation de conflit. Contrairement aux verrous externes, les verrous internes sont libérés dès la fin de l'opération (y compris dans le cas d'opérations d'écriture).

Les verrous internes sont regroupés en classes en fonction de leur utilisation et des composants. Zéro ou plusieurs verrous d’une classe particulière peuvent exister à tout moment dans une instance de SQL Server.

Remarque

sys.dm_os_latch_stats ne suit pas les demandes de verrou qui ont été accordées immédiatement, ou qui ont échoué sans attendre.

Le tableau suivant fournit une description succincte des différentes classes de verrous internes.

Classe de verrou interne Description
ALLOC_CREATE_RINGBUF Utilisé en interne par SQL Server pour initialiser la synchronisation de la création d’une mémoire tampon d’anneau d’allocation.
ALLOC_CREATE_FREESPACE_CACHE Permet d’initialiser la synchronisation des caches d’espace libre interne pour les tas.
ALLOC_CACHE_MANAGER Verrous utilisés pour synchroniser les tests de cohérence internes.
ALLOC_FREESPACE_CACHE Verrous utilisés pour synchroniser l'accès à un cache de pages contenant de l'espace libre pour des segments de mémoire et des objets volumineux binaires (BLOB). Sur les verrous de cette classe, il peut y avoir contention lorsque plusieurs connexions essaient simultanément d'insérer des lignes dans un segment de mémoire ou un objet BLOB. Vous pouvez réduire cette contention en partitionnant l'objet. Chaque partition a son propre verrou interne. Le partitionnement répartit les insertions entre plusieurs verrous internes.
ALLOC_EXTENT_CACHE Verrous utilisés pour synchroniser l'accès à un cache d'extensions qui contient des pages non allouées. Sur les verrous de cette classe, il peut y avoir contention lorsque plusieurs connexions essaient simultanément d'allouer des pages de données dans la même unité d'allocation. Vous pouvez réduire cette contention en partitionnant l'objet dont cette unité d'allocation fait partie.
ACCESS_METHODS_DATASET_PARENT Verrous utilisés pour synchroniser l'accès des datasets enfants au dataset parent pendant les opérations en parallèle.
ACCESS_METHODS_HOBT_FACTORY Verrous utilisés pour synchroniser l'accès à une table de hachage interne.
ACCESS_METHODS_HOBT Verrous utilisés pour synchroniser l'accès à la représentation d'un HoBt en mémoire.
ACCESS_METHODS_HOBT_COUNT Verrous utilisés pour synchroniser l'accès aux compteurs de pages et de lignes d'un HoBt.
ACCESS_METHODS_HOBT_VIRTUAL_ROOT Verrous utilisés pour synchroniser l'accès à l'abstraction de page racine d'un arbre B (B-tree) interne.
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC Verrous utilisés pour synchroniser l'accès aux tables de travail.
ACCESS_METHODS_BULK_ALLOC Verrous utilisés pour synchroniser l'accès au sein d'allocateurs en bloc.
ACCESS_METHODS_SCAN_RANGE_GENERATOR Verrous utilisés pour synchroniser l'accès à un générateur de plages pendant des analyses parallèles.
ACCESS_METHODS_KEY_RANGE_GENERATOR Verrous utilisés pour synchroniser l'accès aux opérations de lecture anticipée pendant les analyses parallèles de plages de clés.
APPEND_ONLY_STORAGE_INSERT_POINT Verrous utilisés pour synchroniser les insertions dans les unités de stockage rapides en mode Append-Only.
APPEND_ONLY_STORAGE_FIRST_ALLOC Verrous utilisés pour synchroniser la première allocation pour une unité de stockage en mode Append-Only.
APPEND_ONLY_STORAGE_UNIT_MANAGER Verrous utilisés pour synchroniser l'accès à la structure interne des données au sein du gestionnaire d'unités de stockage rapide en mode Append-Only.
APPEND_ONLY_STORAGE_MANAGER Verrous utilisés pour synchroniser les opérations de compactage dans le gestionnaire d'unités de stockage rapide en mode Append-Only.
BACKUP_RESULT_SET Verrous utilisés pour synchroniser les jeux de résultats des sauvegardes parallèles.
BACKUP_TAPE_POOL Verrous utilisés pour synchroniser les pools de bandes de sauvegarde.
BACKUP_LOG_REDO Verrous utilisés pour synchroniser les opérations de restauration par progression des journaux de sauvegarde.
BACKUP_INSTANCE_ID Verrous utilisés pour synchroniser la génération d'ID d'instance pour les compteurs de l'analyseur de performances de sauvegarde.
BACKUP_MANAGER Verrous utilisés pour synchroniser le gestionnaire de sauvegarde interne.
BACKUP_MANAGER_DIFFERENTIAL Verrous utilisés pour synchroniser les opérations de sauvegarde différentielle avec DBCC.
BACKUP_OPERATION Verrous utilisés pour la synchronisation de la structure interne des données dans une opération de sauvegarde (de base de données, de journal ou de fichiers).
BACKUP_FILE_HANDLE Verrous utilisés pour synchroniser les opérations d'ouverture de fichier pendant une opération de restauration.
BUFFER Verrous utilisés pour synchroniser l'accès à court terme aux pages de base de données. Un verrou de mémoire tampon est nécessaire avant la lecture ou la modification d'une page de base de données. Une contention de verrou de ce type peut indiquer plusieurs problèmes, notamment des pages sensibles et des E/S lentes.

Cette classe de verrous englobe toutes les utilisations possibles des verrous de page. sys.dm_os_wait_stats fait une différence entre les attentes de verrou de page provoquées par les opérations d’E/S et les opérations de lecture et d’écriture sur la page.
BUFFER_POOL_GROW Verrous utilisés pour la synchronisation du gestionnaire de mémoires tampons interne pendant les opérations de développement du pool de mémoires tampons.
DATABASE_CHECKPOINT Verrous utilisés pour sérialiser les points de contrôle dans une base de données.
CLR_PROCEDURE_HASHTABLE Utilisation interne uniquement.
CLR_UDX_STORE Utilisation interne uniquement.
CLR_DATAT_ACCESS Utilisation interne uniquement.
CLR_XVAR_PROXY_LIST Utilisation interne uniquement.
DBCC_CHECK_AGGREGATE Utilisation interne uniquement.
DBCC_CHECK_RESULTSET Utilisation interne uniquement.
DBCC_CHECK_TABLE Utilisation interne uniquement.
DBCC_CHECK_TABLE_INIT Utilisation interne uniquement.
DBCC_CHECK_TRACE_LIST Utilisation interne uniquement.
DBCC_FILE_CHECK_OBJECT Utilisation interne uniquement.
DBCC_PERF Verrous utilisés pour synchroniser les compteurs de l'analyseur de performances interne.
DBCC_PFS_STATUS Utilisation interne uniquement.
DBCC_OBJECT_METADATA Utilisation interne uniquement.
DBCC_HASH_DLL Utilisation interne uniquement.
EVENTING_CACHE Utilisation interne uniquement.
FCB Verrous utilisés pour synchroniser l'accès au bloc de contrôle des fichiers.
FCB_REPLICA Utilisation interne uniquement.
FGCB_ALLOC Verrous utilisés pour synchroniser l'accès aux informations d'allocation utilisant le mécanisme du tourniquet (round robin) au sein d'un groupe de fichiers.
FGCB_ADD_REMOVE Permet de synchroniser l’accès aux groupes de fichiers pour les opérations d’ajout, de suppression, de croissance et de réduction des fichiers.
FILEGROUP_MANAGER Utilisation interne uniquement.
FILE_MANAGER Utilisation interne uniquement.
FILESTREAM_FCB Utilisation interne uniquement.
FILESTREAM_FILE_MANAGER Utilisation interne uniquement.
FILESTREAM_GHOST_FILES Utilisation interne uniquement.
FILESTREAM_DFS_ROOT Utilisation interne uniquement.
LOG_MANAGER Utilisation interne uniquement.
FULLTEXT_DOCUMENT_ID Utilisation interne uniquement.
FULLTEXT_DOCUMENT_ID_TRANSACTION Utilisation interne uniquement.
FULLTEXT_DOCUMENT_ID_NOTIFY Utilisation interne uniquement.
FULLTEXT_LOGS Utilisation interne uniquement.
FULLTEXT_CRAWL_LOG Utilisation interne uniquement.
FULLTEXT_ADMIN Utilisation interne uniquement.
FULLTEXT_ADMIN_COMMAND_CACHE Utilisation interne uniquement.
FULLTEXT_LANGUAGE_TABLE Utilisation interne uniquement.
FULLTEXT_CRAWL_DM_LIST Utilisation interne uniquement.
FULLTEXT_CRAWL_CATALOG Utilisation interne uniquement.
FULLTEXT_FILE_MANAGER Utilisation interne uniquement.
DATABASE_MIRRORING_REDO Utilisation interne uniquement.
DATABASE_MIRRORING_SERVER Utilisation interne uniquement.
DATABASE_MIRRORING_CONNECTION Utilisation interne uniquement.
DATABASE_MIRRORING_STREAM Utilisation interne uniquement.
QUERY_OPTIMIZER_VD_MANAGER Utilisation interne uniquement.
QUERY_OPTIMIZER_ID_MANAGER Utilisation interne uniquement.
QUERY_OPTIMIZER_VIEW_REP Utilisation interne uniquement.
RECOVERY_BAD_PAGE_TABLE Utilisation interne uniquement.
RECOVERY_MANAGER Utilisation interne uniquement.
SECURITY_OPERATION_RULE_TABLE Utilisation interne uniquement.
SECURITY_OBJPERM_CACHE Utilisation interne uniquement.
SECURITY_CRYPTO Utilisation interne uniquement.
SECURITY_KEY_RING Utilisation interne uniquement.
SECURITY_KEY_LIST Utilisation interne uniquement.
SERVICE_BROKER_CONNECTION_RECEIVE Utilisation interne uniquement.
SERVICE_BROKER_TRANSMISSION Utilisation interne uniquement.
SERVICE_BROKER_TRANSMISSION_UPDATE Utilisation interne uniquement.
SERVICE_BROKER_TRANSMISSION_STATE Utilisation interne uniquement.
SERVICE_BROKER_TRANSMISSION_ERRORS Utilisation interne uniquement.
SSBXmitWork Utilisation interne uniquement.
SERVICE_BROKER_MESSAGE_TRANSMISSION Utilisation interne uniquement.
SERVICE_BROKER_MAP_MANAGER Utilisation interne uniquement.
SERVICE_BROKER_HOST_NAME Utilisation interne uniquement.
SERVICE_BROKER_READ_CACHE Utilisation interne uniquement.
SERVICE_BROKER_WAITFOR_MANAGER Permet de synchroniser une carte au niveau de l’instance des files d’attente. Une file d’attente existe par ID de base de données, version de base de données et tuple d’ID de file d’attente. La contention sur les verrous de cette classe peut se produire lorsque de nombreuses connexions sont : dans un état d’attente WAITFOR(RECEIVE) ; appel de WAITFOR(RECEIVE) ; dépassement du délai d’expiration WAITFOR ; réception d’un message ; validation ou restauration de la transaction qui contient WAITFOR(RECEIVE) ; Vous pouvez réduire la contention en réduisant le nombre de threads dans un état d’attente WAITFOR(RECEIVE).
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA Utilisation interne uniquement.
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA Utilisation interne uniquement.
SERVICE_BROKER_TRANSPORT Utilisation interne uniquement.
SERVICE_BROKER_MIRROR_ROUTE Utilisation interne uniquement.
TRACE_ID Utilisation interne uniquement.
TRACE_AUDIT_ID Utilisation interne uniquement.
TRACE Utilisation interne uniquement.
TRACE_CONTROLLER Utilisation interne uniquement.
TRACE_EVENT_QUEUE Utilisation interne uniquement.
TRANSACTION_DISTRIBUTED_MARK Utilisation interne uniquement.
TRANSACTION_OUTCOME Utilisation interne uniquement.
NESTING_TRANSACTION_READONLY Utilisation interne uniquement.
NESTING_TRANSACTION_FULL Utilisation interne uniquement.
MSQL_TRANSACTION_MANAGER Utilisation interne uniquement.
DATABASE_AUTONAME_MANAGER Utilisation interne uniquement.
UTILITY_DYNAMIC_VECTOR Utilisation interne uniquement.
UTILITY_SPARSE_BITMAP Utilisation interne uniquement.
UTILITY_DATABASE_DROP Utilisation interne uniquement.
UTILITY_DYNAMIC_MANAGER_VIEW Utilisation interne uniquement.
UTILITY_DEBUG_FILESTREAM Utilisation interne uniquement.
UTILITY_LOCK_INFORMATION Utilisation interne uniquement.
VERSIONING_TRANSACTION Utilisation interne uniquement.
VERSIONING_TRANSACTION_LIST Utilisation interne uniquement.
VERSIONING_TRANSACTION_CHAIN Utilisation interne uniquement.
VERSIONING_STATE Utilisation interne uniquement.
VERSIONING_STATE_CHANGE Utilisation interne uniquement.
KTM_VIRTUAL_CLOCK Utilisation interne uniquement.

Remarque

De manière générale, la documentation SQL Server utilise le terme B-tree en référence aux index. Dans les index rowstore, SQL Server implémente une structure B+. Cela ne s’applique pas aux index columnstore ou aux magasins de données en mémoire. Pour plus d’informations, consultez le Guide de conception et d’architecture d’index SQL Server et Azure SQL.

Voir aussi

DBCC SQLPERF (Transact-SQL)
Vues de gestion dynamique SQL Server liées au système d'exploitation (Transact-SQL)
SQL Server, objet Latches