227
7.4 Attentes
Pour connaître le niveau d’isolation d’une autre session que la vôtre, vous deviez
utiliser une commande DBCC non documentée : DBCC PSS, dont la fonction est de
produire des informations de bas niveau sur les utilisateurs connectés, et les sessions.
Depuis 2005, vous avez à disposition la vue de gestion dynamique
sys.dm_exec_sessions. Par exemple, pour connaître le niveau d’isolation de votre
propre session :
SELECT transaction_isolation_level,
CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncomitted'
WHEN 2 THEN 'Readcomitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END AS isolation_level_description
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID
Mais l’intérêt dans le code est limité. Si vous voulez forcer votre niveau d’isolation, exécutez simplement un SET TRANSACTION ISOLATION LEVEL… quel que soit
votre niveau actuel. Ce sera plus rapide que de tester le niveau auparavant.
7.4 ATTENTES
Comme l’isolation de la transaction empêche les accès concurrents non compatibles
sur les mêmes ressources de verrouillage, cela veut dire qu’une transaction qui veut
accéder à une ressource utilisée par une autre transaction doit attendre la libération
des verrous non compatibles.
Par défaut, une transaction attend indéfiniment la libération de verrous. Vous
pouvez limiter cette attente par l’option de session LOCK_TIMEOUT :
SET LOCK_TIMEOUT 1000;
SELECT @@LOCK_TIMEOUT as lock_timeout;
La valeur est exprimée en millisecondes. Le défaut est -1, c’est-à-dire sans limite.
Vous pouvez aussi utiliser l’indicateur de table READPAST (voir la section 8.2.1).
Les attentes ne sont pas seulement dues au verrouillage mais peuvent être provoquées par les entrées/sorties, la mise en attente du processus par l’ordonnanceur, etc.
Nous verrons ensuite les principaux types d’attentes.
Une attente peut aussi se produire sur l’attribution de mémoire pour la requête.
Dans des situations de pression sur la mémoire, cela peut même provoquer des dépassements de délai (timeouts).
7.4 Attentes
Pour connaître le niveau d’isolation d’une autre session que la vôtre, vous deviez
utiliser une commande DBCC non documentée : DBCC PSS, dont la fonction est de
produire des informations de bas niveau sur les utilisateurs connectés, et les sessions.
Depuis 2005, vous avez à disposition la vue de gestion dynamique
sys.dm_exec_sessions. Par exemple, pour connaître le niveau d’isolation de votre
propre session :
SELECT transaction_isolation_level,
CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncomitted'
WHEN 2 THEN 'Readcomitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END AS isolation_level_description
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID
Mais l’intérêt dans le code est limité. Si vous voulez forcer votre niveau d’isolation, exécutez simplement un SET TRANSACTION ISOLATION LEVEL… quel que soit
votre niveau actuel. Ce sera plus rapide que de tester le niveau auparavant.
7.4 ATTENTES
Comme l’isolation de la transaction empêche les accès concurrents non compatibles
sur les mêmes ressources de verrouillage, cela veut dire qu’une transaction qui veut
accéder à une ressource utilisée par une autre transaction doit attendre la libération
des verrous non compatibles.
Par défaut, une transaction attend indéfiniment la libération de verrous. Vous
pouvez limiter cette attente par l’option de session LOCK_TIMEOUT :
SET LOCK_TIMEOUT 1000;
SELECT @@LOCK_TIMEOUT as lock_timeout;
La valeur est exprimée en millisecondes. Le défaut est -1, c’est-à-dire sans limite.
Vous pouvez aussi utiliser l’indicateur de table READPAST (voir la section 8.2.1).
Les attentes ne sont pas seulement dues au verrouillage mais peuvent être provoquées par les entrées/sorties, la mise en attente du processus par l’ordonnanceur, etc.
Nous verrons ensuite les principaux types d’attentes.
Une attente peut aussi se produire sur l’attribution de mémoire pour la requête.
Dans des situations de pression sur la mémoire, cela peut même provoquer des dépassements de délai (timeouts).
