[SQL Server] Accès concurrentiels : brève présentation des types de contrôle de la concurrence

Ce petit billet présente les contrôles de la concurrence sous SQL Server. SQL Server possède principalement 2 types de contrôle de la concurrence (ou stratégies de verrouillage) : le contrôle pessimiste (par défaut) et le contrôle optimiste. Il existe également un 3ème type (plus exceptionnel) de contrôle de la concurrence : le contrôle anarchique (ou chaotique). Nous n’allons pas, ici, traiter des aspects concurrentiels niveau applicatif, mais si vous êtes curieux : http://msdn.microsoft.com/en-us/library/cs6hb8k4.aspx.

Les différents types de contrôle de la concurrence et leur utilité

Le contrôle pessimiste

Cette méthode de verrouillage est basée sur une approche préventive de la concurrence. Elle est utilisée lorsqu’une même donnée est susceptible d’être mise à jour par plusieurs utilisateurs. Dans ce cas, pour éviter des modifications conflictuelles, SQL Server répartit les accès de façon à ce qu’un seul utilisateur à la fois édite une donnée. Le revers de la médaille de cette méthode de verrouillage est que les autres utilisateurs suivants doivent attendre jusqu’à ce que le(s) utilisateur(s) précédent(s) ai(en)t terminé leurs modifications, ce qui aura pour effet de potentiellement augmenter les temps de réponse ou la durée d’indisponibilité des données traitées.

Le contrôle optimiste

Cette méthode de verrouillage est basée sur une approche plus souple de la concurrence. Elle est utilisée lorsqu’une même donnée est susceptible d’être rarement mise à jour par plusieurs utilisateurs concurrents. Dans le cas d’une tentative de modifications concurrentes d’une même donnée, les conflits sont détectés (cas du niveau d’isolation SNAPSHOT) quand la modification est validée et qu’un autre utilisateur, dans le même temps, tente de refaire une modification. Cela permet d’éviter la perte de la mise-à-jour précédente. Même si les applications travaillant dans un environnement concurrentiel optimiste connaissent des temps d’accès généralement plus rapides que dans le cas d’un accès pessimiste, cela consomme beaucoup plus de ressources systèmes (notamment à cause du row-versioning qui phagocyte de l’espace au sein de tempDB).

Le contrôle anarchique

Cette méthode de verrouillage est utilisée dans des contextes exceptionnels, où les mises-à-jour concurrentes ne sont pas possibles ou que les mises-à-jour anarchiques sont tolérées. Pour être exact, ce type de méthode est généralement utilisé dans des applications mono-utilisateurs ou des applications multi-utilisateurs conçues de telle sorte que les mises-à-jour concurrentes sont bannies (cas d’une application n’acceptant qu’un seul login commun, par exemple). En résumé… Chaque méthode de contrôle concurrentiel a ses spécificités qui font que suivant différents contextes, elle peut être adaptée ou non. Le tableau ci-dessous résume les spécificités de chaque type de contrôle de la concurrence en fonction des accès en lecture et en écriture :

Contrôle pessimiste Contrôle optimiste Contrôle anarchique
Les lectures bloquent les autres lectures Non. Non. Non.
Les lectures bloquent les écritures Oui, à partir du niveau d’isolation REPEATABLE READ. Non. Non.
Les écritures bloquent les lectures Oui, hormis dans le cas du niveau d’isolation READ UNCOMMITTED. Oui. Non.
Les écritures bloquent les autres écritures Oui. Oui. Non.

En résumé, nous pouvons présenter chaque type de contrôle comme suit :

  • L’Optimiste : « Je suis persuadé que tout ira bien, et qu’il n’y aura pas de collisions. De temps en temps, je jetterai un coup d’œil à la ligne de données, mais je laisse le SGBD faire ce qu’il veut ».
  • Le Pessimiste : « J’ai la sensation que quelqu’un pourrait mettre à jour cette ligne de données en même temps que moi. Je pense qu’il serait préférable d’indiquer au SGBD de ne pas laisser untel la toucher tant que j’en aurai pas fini avec ».
  • L’Anarchiste : « Les gars, c’est open-bar ! ».

Pour aller plus loin…

Pour consulter d’autres billets relatifs aux accès concurrentiels, gardez un oeil ici.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s