Articles avec le tag ‘Plan d’exécution’

Introduction
Imaginez-vous dans cette situation : un programmeur vous appelle « Monsieur CAPITAINE, j’ai des problèmes avec un de mes traitements sur l’instance de Dèv, c’est très lent. Pouvez-vous me dire ce qui est lent ? ». Qu’allez-vous faire ? Vous allez lancer des traces.
C’est un des outils les plus pratiques du DBA Oracle. Une trace est un fichier plat qui recense tous les ordres SQL passés entre un laps de temps que vous définirez. Dans l’exemple plus haut, l’intervalle serait Début du traitement – Fin du traitement .
Un peu de technique
Voici une trace : Cliquez ici pour la voir
Première impression : « Gné ? » . Vous avez tout à fait raison. Les traces, en elle-même, sans être parsées par l’utilitaire tkprof sont globalement illisibles sauf pour les DBA très expérimentés qui se feront une joie de vous les déchiffrer.
Pour satisfaire votre curiosité, voici la même trace qu’au dessus mais à la différence d’être parsées par TKPROF : Cliquez ici pour la voir
Comment on trace ?
Il y a plusieurs façons de générer des traces. Vous pouvez les générer pour « vous » au niveau session, mais vous pouvez aussi les générer pour une session différente de la vôtre.
Tracer votre propre session
Tout d’abord au niveau de votre de votre session, la solution la plus simple est l’ALTER SESSION :
ALTER SESSION SET EVENTS ‘10046 trace name context forever,level 12′;
Vous n’avez plus qu’à exécuter votre traitement qui pose des soucis de performance. Une fois terminée, vous n’avez qu’à entrer cette commande :
ALTER SESSION SET EVENTS ‘10046 trace name context off’;
Tiens d’ailleurs en parlant de ça je pourrais les trouver où mes traces ?
Pour trouver l’emplacement de vos traces, il suffit d’ouvrir SQL*plus et de copier la commande
show parameter user_dump_dest
Le résultat est le dossier exact où se trouve toutes vos traces générées.
Tracer une session distante
Maintenant, pour tracer des sessions distantes, vous pouvez utiliser le package DBMS_SYSTEM comme ceci :
EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (sid=>[sid],serial#=>[serial],sql_trace=>TRUE);
Exécutez votre traitement puis pour stopper les traces :
EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (sid=>[sid],serial#=>[serial],sql_trace=>FALSE);
Attention : Votre utilisateur doit avoir le droit EXECUTE sur le package DBMS_SYSTEM pour faire ceci.
Je fais comment pour récupérer le SID et le SERIAL ?
Le SID (Session ID) et le Serial# sont des identifiants uniques attachés à chaque session sur votre base de données Oracle. Pour récupérer le SID de la session visée, exécutez cette requête :
SELECT SYS_CONTEXT('userenv','SID') SID FROM DUAL;
Ensuite, avec un utilisateur qui a les privilèges de SELECT sur la vue V$SESSION, vous pouvez retrouver le serial avec cette requête :
SELECT serial# FROM V$SESSION WHERE sid=[SID précédemment trouvé];
Conclusion
Maintenant que vous savez lancer des traces de votre session et d’une distante, il vous faut les rendre lisibles. Pour ceci, la page suivante vous apprendra à manipuler l’utilitaire tkprof.