sys.dm_os_latch_stats (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 les pools élastiques, le compte d’administration du serveur, le compte d’administration Microsoft Entra ou l’appartenance dans ##MS_ServerStateReader##
au rôle de 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, le moteur de base de données implémente une structure B+. Cela ne s’applique pas aux index columnstore ou aux index sur les tables à mémoire optimisée. 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