Les verrous DB2

DB2 garantit automatiquement l’intégrité des données en appliquant plusieurs stratégies de verrouillage. Ces stratégies permettent à plusieurs utilisateurs de plusieurs environnements d’accéder aux données et de les modifier simultanément. Les verrous DB2 empêchent un programme d’accéder aux données qui ont été modifiées, mais pas encore validées, par un autre programme.

Le processus de verrouillage est contrôlé par l’IRLM (Inter System Resource Lock Manager) de DB2. Cependant, chaque fois que possible, DB2 essaie de verrouiller les pages sans passer par l’IRLM. Ce type de verrous s’appelle un loquet.

Espace table – Récapitulatif

Les données sont en fait stockées dans une structure appelée espace table. Chaque espace table est corrélé à un ou plusieurs ensembles de données VSAM physiques individuels dans les volumes DASD d’un groupe de stockage. Chaque espace table contient une ou plusieurs tables.

Il existe trois différents types d’espace table et sont les suivants :

  1. Espace de table simple
  2. Espace table segmenté
  3. Espace table partitionné

Espace table simple

Dans un espace table simple, l’espace est divisé en pages sans aucune structure de niveau supérieur. Un espace table simple peut contenir des données provenant de plusieurs tables. Comme les lignes de données de différentes tables peuvent résider sur la même page, la simultanéité sera considérablement réduite. Après la version 2.1 de DB2, les espaces table simples sont presque obsolètes.

Espace table segmenté

Dans un espace table segmenté, l’espace est divisé en groupes de pages de taille égale appelés “Segments”. Chaque segment peut contenir des lignes d’une seule table. Il s’agit du type d’espace table le plus efficace, car il maximise la simultanéité.

Espace table partitionné

Dans l’espace table partitionné, l’espace est divisé en unités appelées “Partitions”. Chaque partition contient une partie d’une table et réside sur un ensemble de données VSAM distinct. Chaque espace table de partition ne peut contenir qu’une seule table. Cela convient aux grandes tables contenant un million de pages ou plus.

Taille de verrouillage

Lorsqu’un espace table est défini ou modifié, la clause LOCKSIZE spécifie une taille de verrou par défaut.

La taille du verrou peut être :

  • ROW
  • PAGE
  • TABLE
  • TABLESPACE
  • ANY

Lorsque l’option LOCKSIZE(ANY) est utilisée, DB2 sélectionne la taille de verrou optimale pour chaque situation de traitement.

Verrouiller l’escalade

La hiérarchie des verrous est la suivante :

Si le nombre de verrous dans un niveau dépasse une valeur par défaut de l’installation, DB2 verrouille une unité plus grande. C’est ce qu’on appelle l’escalade de verrouillage.

Durée de verrouillage

La durée du verrouillage fait référence à la durée pendant laquelle un verrouillage est maintenu. La durée d’un verrou est basée sur les options BIND choisies pour le programme demandant des verrous. Les verrous peuvent être acquis soit immédiatement lorsque l’exécution du plan est demandée, soit de manière itérative selon les besoins pendant l’exécution du programme.

Paramètres de liaison affectant l’espace table et les verrous de table

  • ACQUIRE(ALLOCATE) : les verrous seront acquis lors de l’allocation du plan, ce qui se produit normalement lorsque la première instruction SQL est émise. Ceci est utilisé pour le traitement par lots.
  • ACQUIRE(USE) : les verrous seront acquis uniquement lorsqu’ils sont requis, instruction SQL par instruction SQL. Ceci est utilisé pour le traitement en ligne.
  • RELEASE (DEALLOCATE) : les verrous ne sont pas libérés tant que le plan n’est pas terminé et qu’il n’est pas utilisé pour le traitement par lots.
  • RELEASE(COMMIT) : les verrous sont libérés lorsqu’un COMMIT est émis et est utilisé pour le traitement en ligne.

Les paramètres de liaison affectant les verrous de page et de ligne sont le niveau d’isolement.