2010-04-27 6 views
1

J'essaie de suivre les performances de certaines procédures qui sont trop lentes (et qui semblent continuer à ralentir). J'utilise v $ session_longops pour savoir combien de travail a été fait, et j'ai une requête (sofar/((v$session_longops.LAST_UPDATE_TIME-v$session_longops.start_time)*24*60*60)) qui me dit la vitesse à laquelle le travail est effectué.

Ce que je voudrais pouvoir faire est de capturer le taux auquel le travail est fait et comment il change au fil du temps. Pour le moment, je ré-exécute la requête manuellement, puis je la copie/colle dans Excel. Pas très optimal, surtout quand le téléphone sonne ou que quelque chose d'autre interrompt ma fréquence d'échantillonnage.

Y at-il un moyen d'avoir un script dans SQL * Plus exécuter une requête evern n secondes, spool les résultats dans un fichier, puis continuer jusqu'à ce que le travail se termine?

(Oracle 10g)

Répondre

3

Snapper Tanel Poder script fait un excellent travail de surveillance active des performances. Il a des paramètres pour

<seconds_in_snap> - the number of seconds between taking snapshots 
<snapshot_count> - the number of snapshots to take (maximum value is power(2,31)-1) 

Il utilise PL/SQL et un appel à DBMS_LOCK.SLEEP

+0

Je ne suis pas sûr d'avoir accès au planificateur, donc je vais donner à ce regard. Thanks1 – FrustratedWithFormsDesigner

+0

Regardé le script, sympa! +1 –

+0

Je n'ai pas encore eu l'occasion de le faire, mais le DBA l'aime vraiment et a l'intention d'en faire quelque chose, alors je pense que c'est la réponse! – FrustratedWithFormsDesigner

1

Si vous pouvez vivre avec en cours d'exécution PL/SQL au lieu d'un SQL * Plus script, vous pouvez envisager d'utiliser le planificateur Oracle. Voir les chapitres 26, 27 et 28 du Oracle Database Administrator's Guide.