250
Chapitre 8. Optimisation du code SQL
Le profiler affiche le plan d’exécution graphique, comme SSMS, sur les événements qui retournent ce plan en XML, ou en format binaire, comme nous le voyons
sur la figure 8.8.
Figure 8.8 — Plan d’exécution dans le profiler
Un dernier mot : la génération en masse de plans d’exécution dans une trace est
non seulement inutile et provoque un raz-de-marée d’informations, mais est aussi
très pénalisante pour les performances. Tracez ces événements seulement au besoin,
en filtrant votre trace.
Vues de gestion dynamique
Vous trouvez le code SQL de vos requêtes, ainsi que leur plan d’exécution, dans
certaines vues de gestion dynamique, celles qui lisent le contenu du cache de plans,
et celles qui affichent les requêtes exécutées dans le SQL Server, en temps réel. Deux
fonctions permettent de retourner respectivement le code SQL de l’instruction
(sys.dm_exec_sql_text) et le plan d’exécution XML (dm_exec_query_plan).
Exemple d’extraction des textes et des plans des tâches en cours :
SELECT er.session_id, er.start_time, er.status, er.command,
st.text, qp.query_plan
FROM sys.dm_exec_requests er
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
La colonne session_id représente les SPID, vous pouvez donc éliminer votre
SPID avec un WHERE session_id <> @@SPID, pour éviter de voir cette requête que
vous venez de lancer, dans la liste.
Chapitre 8. Optimisation du code SQL
Le profiler affiche le plan d’exécution graphique, comme SSMS, sur les événements qui retournent ce plan en XML, ou en format binaire, comme nous le voyons
sur la figure 8.8.
Figure 8.8 — Plan d’exécution dans le profiler
Un dernier mot : la génération en masse de plans d’exécution dans une trace est
non seulement inutile et provoque un raz-de-marée d’informations, mais est aussi
très pénalisante pour les performances. Tracez ces événements seulement au besoin,
en filtrant votre trace.
Vues de gestion dynamique
Vous trouvez le code SQL de vos requêtes, ainsi que leur plan d’exécution, dans
certaines vues de gestion dynamique, celles qui lisent le contenu du cache de plans,
et celles qui affichent les requêtes exécutées dans le SQL Server, en temps réel. Deux
fonctions permettent de retourner respectivement le code SQL de l’instruction
(sys.dm_exec_sql_text) et le plan d’exécution XML (dm_exec_query_plan).
Exemple d’extraction des textes et des plans des tâches en cours :
SELECT er.session_id, er.start_time, er.status, er.command,
st.text, qp.query_plan
FROM sys.dm_exec_requests er
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp
La colonne session_id représente les SPID, vous pouvez donc éliminer votre
SPID avec un WHERE session_id <> @@SPID, pour éviter de voir cette requête que
vous venez de lancer, dans la liste.
