260
Chapitre 8. Optimisation du code SQL
INSERT INTO dbo.ReadPast (nombre) VALUES (3)
INSERT INTO dbo.ReadPast (nombre) VALUES (4)
INSERT INTO dbo.ReadPast (nombre) VALUES (5)
BEGIN TRAN
UPDATE dbo.ReadPast SET nombre = -nombre
WHERE nombre = 3
-- dans une autre session
SELECT *
FROM dbo.ReadPast WITH (READPAST)
• READUNCOMMITTED : force le niveau d’isolation READ UNCOMMITTED pour la table,
strictement équivalent à NOLOCK.
• REPEATABLEREAD : force le niveau d’isolation REPEATABLE READ pour la table. Ce
n’est donc intéressant que dans une transaction explicite.
• ROWLOCK – force le choix d’une granularité de verrous par ligne (granularité
par défaut de SQL Server), empêche donc normalement l’escalade. Sans
garantie. Par exemple, en niveau d’isolation SERIALIZABLE, des verrous plus
larges doivent de toute façon être posés.
• SERIALIZABLE : force le niveau d’isolation SERIALIZABLE pour la table, strictement équivalent à HOLDLOCK.
• TABLOCK : force le choix d’une granularité de verrou par table. Pose un verrou
partagé (S).
• TABLOCKX : force le choix d’une granularité de verrou par table. Pose un verrou
exclusif (X).
• UPDLOCK : force un verrouillage de mise à jour (U).
• XLOCK : force un verrouillage exclusif (X).
8.2.2 Guides de plan
Les guides de plan permettent de forcer des indicateurs de requêtes sur une instruction sans la modifier directement. Ils sont utiles pour appliquer des indicateurs à des
requêtes sur lesquelles vous n’avez pas la main. Vous créez simplement un guide de
plan à l’aide de la procédure stockée système sp_create_plan_guide, et vous modifiez, désactivez ou activez ce guide par la procédure sp_control_plan_guide. Vous
pouvez créer trois types de guides :
• un guide pour une instruction dans un OBJET de code : procédure stockée,
fonction utilisateur, déclencheur ;
• un guide SQL, pour des requêtes ad hoc ;
• un guide de type TEMPLATE, pour modifier le comportement d’autoparamétrage d’une classe de requêtes. Ce type ne permet que de modifier l’indicateur PARAMETERIZATION de la requête.
Chapitre 8. Optimisation du code SQL
INSERT INTO dbo.ReadPast (nombre) VALUES (3)
INSERT INTO dbo.ReadPast (nombre) VALUES (4)
INSERT INTO dbo.ReadPast (nombre) VALUES (5)
BEGIN TRAN
UPDATE dbo.ReadPast SET nombre = -nombre
WHERE nombre = 3
-- dans une autre session
SELECT *
FROM dbo.ReadPast WITH (READPAST)
• READUNCOMMITTED : force le niveau d’isolation READ UNCOMMITTED pour la table,
strictement équivalent à NOLOCK.
• REPEATABLEREAD : force le niveau d’isolation REPEATABLE READ pour la table. Ce
n’est donc intéressant que dans une transaction explicite.
• ROWLOCK – force le choix d’une granularité de verrous par ligne (granularité
par défaut de SQL Server), empêche donc normalement l’escalade. Sans
garantie. Par exemple, en niveau d’isolation SERIALIZABLE, des verrous plus
larges doivent de toute façon être posés.
• SERIALIZABLE : force le niveau d’isolation SERIALIZABLE pour la table, strictement équivalent à HOLDLOCK.
• TABLOCK : force le choix d’une granularité de verrou par table. Pose un verrou
partagé (S).
• TABLOCKX : force le choix d’une granularité de verrou par table. Pose un verrou
exclusif (X).
• UPDLOCK : force un verrouillage de mise à jour (U).
• XLOCK : force un verrouillage exclusif (X).
8.2.2 Guides de plan
Les guides de plan permettent de forcer des indicateurs de requêtes sur une instruction sans la modifier directement. Ils sont utiles pour appliquer des indicateurs à des
requêtes sur lesquelles vous n’avez pas la main. Vous créez simplement un guide de
plan à l’aide de la procédure stockée système sp_create_plan_guide, et vous modifiez, désactivez ou activez ce guide par la procédure sp_control_plan_guide. Vous
pouvez créer trois types de guides :
• un guide pour une instruction dans un OBJET de code : procédure stockée,
fonction utilisateur, déclencheur ;
• un guide SQL, pour des requêtes ad hoc ;
• un guide de type TEMPLATE, pour modifier le comportement d’autoparamétrage d’une classe de requêtes. Ce type ne permet que de modifier l’indicateur PARAMETERIZATION de la requête.
