Bases des bases de données

La transaction T1 a posé un verrou exclusif sur la ligne A puis demandé un verrou sur la ligne B, tandis que T2 a posé un verrou exclusif sur la ligne B puis demandé un verrou sur la ligne A ; aucune ne peut donc progresser. Que fait généralement un SGBD lorsqu'il détecte cette situation ?

  1. AIl les laisse attendre toutes les deux ; l'un des verrous finira par se libérer de lui-même
  2. BIl annule l'une des transactions pour libérer ses verrous et laisse l'autre progresser
  3. CIl valide telles quelles les mises à jour de T1 et de T2
Afficher la réponse et l'explication

Réponse : B. Il annule l'une des transactions pour libérer ses verrous et laisse l'autre progresser

Une situation dans laquelle 2 transactions ou plus attendent mutuellement la libération de verrous, de sorte qu'aucune ne peut progresser, s'appelle un interblocage (deadlock). Attendre ne le résout jamais ; de nombreux SGBD détectent donc l'interblocage, par exemple lorsqu'un cycle apparaît dans le graphe d'attente qui indique quelle transaction attend quelle autre, et annulent l'une d'elles (la victime) pour libérer ses verrous. La transaction annulée est relancée plus tard. Une autre approche consiste à fixer une limite (délai d'expiration, ou timeout) à l'attente d'un verrou et à annuler une transaction qui la dépasse. Comme mesure préventive, il est efficace de faire poser les verrous par toutes les transactions dans un ordre fixe, par exemple la ligne A avant la ligne B.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. Lors de la mise à jour des données, de nombreux SGBD enregistrent les modifications dans un journal (log) et écrivent ce journal sur un support de stockage non volatil avant la base de données elle-même (WAL : journalisation à écriture anticipée, write-ahead logging). Quelle est la principale raison de cette approche ?
  2. On considère les transactions T1 à T5 ; un point de contrôle (checkpoint) a été pris une fois avant qu'une panne ne survienne. T1 a démarré et a été validée avant le point de contrôle. T2 et T3 ont démarré avant le point de contrôle ; T2 a été validée après le point de contrôle mais avant la panne, et T3 n'était pas validée au moment de la panne. T4 et T5 ont démarré après le point de contrôle ; T4 a été validée avant la panne, et T5 ne l'était pas. Lors de la reprise après la panne, quelles transactions faut-il rejouer (rollforward) à l'aide du journal ?
  3. On a créé un index en arbre B+ sur la colonne NumMembre d'une table Membre de 1 million de lignes. Quelle combinaison associe correctement l'effet que l'on peut généralement attendre et son coût ?
  4. Pour une table Membre de 1 million de lignes, on envisage de créer un index en arbre B+ sur chacune des colonnes NumMembre (toutes différentes), Prefecture (47 valeurs) et Sexe (2 valeurs, réparties à peu près à moitié). Lors d'une recherche qui précise dans la clause WHERE la valeur d'une seule colonne, sur quelle colonne un index sera-t-il probablement le moins efficace ?
  5. Parmi les bases de données dites NoSQL, quelle description des caractéristiques d'une base clé-valeur est généralement correcte ?