Comportement de verrouillage dans Parallel Data Warehouse

Découvrez comment Parallel Data Warehouse utilise le verrouillage pour garantir l’intégrité des transactions et maintenir la cohérence des bases de données lorsque plusieurs utilisateurs accèdent aux données en même temps.

Principes de base du verrouillage

Modes

SQL Server PDW prend en charge quatre modes de verrouillage :

Exclusive
Le verrou exclusif interdit l’écriture ou la lecture de l’objet verrouillé jusqu’à ce que la transaction contenant le verrou exclusif se termine. Aucun autre verrou de quelque mode que ce soit n’est autorisé alors que le verrou exclusif est actif. Par exemple, DROP TABLE et CREATE DATABASE utilisent un verrou exclusif.

Shared
Le verrou partagé interdit l’initiation d’un verrou exclusif sur l’objet concerné, mais autorise tous les autres modes de verrouillage. Par exemple, l’instruction SELECT lance un verrou partagé et permet donc à plusieurs requêtes d’accéder simultanément aux données sélectionnées, mais empêche la lecture des mises à jour des enregistrements jusqu’à la fin de l’instruction SELECT.

Mise à jour exclusive
Le verrou ExclusiveUpdate interdit l’écriture dans l’objet verrouillé, mais autorise la lecture via le verrou partagé. Aucun autre verrou n’est autorisé pendant que le verrou ExclusiveUpdate est en vigueur. Par exemple, BACKUP DATABASE et RESTORE DATABASE utilisent un verrou de mise à jour exclusive.

Mise à jour partagée
Le verrou de mise à jour partagé interdit les modes de verrouillage Exclusif et de mise à jour exclusive, et autorise les modes de verrouillage partagé et de mise à jour partagée sur l'objet. SharedUpdate modifie un objet, mais ne limite pas l’accès en lecture pendant la modification. Par exemple, INSERT et UPDATE utilisent un verrou SharedUpdate.

Classes de ressources

Les verrous sont conservés sur les classes d’objets suivantes : DATABASE, SCHEMA, OBJECT (une table, une vue ou une procédure), APPLICATION (utilisée en interne), EXTERNALDATASOURCE, EXTERNALFILEFORMAT AND SCHEMARESOLUTION (un verrou au niveau de la base de données pris lors de la création, de la modification ou de la suppression d’objets de schéma ou d’utilisateurs de base de données). Ces classes d’objets peuvent apparaître dans la colonne object_type de sys.dm_pdw_waits.

Remarques d'ordre général

Les verrous peuvent être appliqués aux bases de données, tables ou vues.

SQL Server PDW n’implémente aucun niveau d’isolation configurable. Il prend en charge le niveau d’isolation READ_UNCOMMITTED tel que défini par la norme ANSI. Toutefois, étant donné que les opérations de lecture sont exécutées sous READ_UNCOMMITTED, très peu d’opérations bloquantes se produisent réellement ou entraînent une contention dans le système.

SQL Server PDW s’appuie sur le moteur SQL Server sous-jacent pour implémenter le contrôle de verrouillage et de concurrence. Si les opérations mènent à un interblocage SQL Server sous-jacent au sein du même nœud, SQL Server PDW tire parti de la fonctionnalité de détection de blocage SQL Server et met fin à l’une des instructions bloquantes.

Note

SQL Server n’autorise pas les instructions qui attendent que les verrous soient bloqués par des demandes de verrou plus récentes. SQL Server PDW n’a pas entièrement implémenté ce processus. Dans SQL Server PDW, les demandes continues de nouveaux verrous partagés peuvent parfois bloquer une demande précédente (mais en attente) pour un verrou exclusif. Par exemple, une instruction UPDATE (nécessitant un verrou exclusif) peut être bloquée par des verrous partagés accordés pour la série d’instructions SELECT . Pour résoudre un processus bloqué (identifié par l’examen des sys.dm_pdw_waits DMV), arrêtez d’envoyer de nouvelles demandes jusqu’à ce que le verrou exclusif soit satisfait.

Table de définition de verrou

SQL Server prend en charge les types de verrous suivants. Tous les types de verrous ne sont pas disponibles sur le nœud de contrôle, mais peuvent se produire sur les nœuds de calcul.

  • Sch-S (stabilité du schéma). Garantit qu’un élément de schéma, tel qu’une table ou un index, n’est pas supprimé alors qu’une session contient un verrou de stabilité de schéma sur l’élément de schéma.

  • Sch-M (modification du schéma). Doit être tenu par n’importe quelle session qui souhaite modifier le schéma de la ressource spécifiée. Garantit qu'aucune autre session ne fait référence à l'objet indiqué.

  • S (partagé). La session provisoire est accordée un accès partagé à la ressource.

  • U (Mise à jour). Indique un verrou de mise à jour acquis sur les ressources qui peuvent éventuellement être mises à jour. Utilisé pour empêcher l'occurrence d'une forme de blocage courante qui apparaît lorsque plusieurs sessions verrouillent les ressources pour une mise à jour potentielle ultérieure.

  • X (Exclusivité). La session de maintien reçoit un accès exclusif à la ressource.

  • IS (intention partagée). Indique l’intention de placer des verrous S sur une ressource subordonnée dans la hiérarchie de verrous.

  • IU (Mise à jour de l’intention). Indique l’intention de placer des verrous U sur une ressource subordonnée dans la hiérarchie de verrous.

  • IX (Intent Exclusive). Indique l’intention de placer des verrous X sur une ressource subordonnée dans la hiérarchie de verrous.

  • SIU (mise à jour de l’intention partagée). Indique un accès partagé à une ressource dans l'objectif d'obtenir des verrous de mise à jour sur les ressources subordonnées dans la hiérarchie des verrous.

  • SIX (Intention Partagée Exclusive) Indique l'accès partagé à une ressource avec l'intention d'acquérir des verrous exclusifs sur les ressources subordonnées dans la hiérarchie des verrous.

  • UIX (Update Intent Exclusive). Indique un maintien d'un verrou de mise à jour sur une ressource avec l’intention d’acquérir des verrous exclusifs sur des ressources subordonnées dans la hiérarchie des verrous.

  • BU. Utilisé par les opérations de masse.

  • RangeS_S (verrou de plage de clés partagée et de ressource partagée). Indique une analyse de plage sérialisable.

  • RangeS_U (verrouillage des ressources de Key-Range partagé et mise à jour). Indique l’analyse de mise à jour sérialisable.

  • RangeI_N (Insérer Key-Range et un verrou de ressource Null). Permet de tester les plages avant d’insérer une nouvelle clé dans un index.

  • RangeI_S. Verrou de conversion de plage de clés, créé par un chevauchement de verrous RangeI_N et S.

  • RangeI_U. Verrou de conversion de Key-Range, créé par un chevauchement de verrous RangeI_N et U.

  • RangeI_X. Verrou de conversion de plage de clés, créé par un chevauchement de verrous RangeI_N et X.

  • RangeX_S. Verrou de conversion Key-Range, créé par un chevauchement de RangeI_N et de RangeS_S. RangeS_S.

  • RangeX_U. Verrou de conversion de plage de clés, créé par le chevauchement des verrous RangeI_N et RangeS_U.

  • RangeX_X (verrouillage exclusif des Key-Range et des ressources exclusives). Il s’agit d’un verrou de conversion utilisé lors de la mise à jour d’une clé dans une plage.