Avatar billede d_warma Nybegynder
31. marts 2004 - 14:57 Der er 4 kommentarer og
2 løsninger

Log/trace på Procedure

Hej,

Jeg har en procedure som kører alt for langsomt i forhold til hvad den skal foretage sig.
Hvordan kan jeg undersøge, hvor i proceduren det går tager for lang tid? Skal jeg lave noget trace eller log?

Hjælp!
Avatar billede trer Nybegynder
31. marts 2004 - 15:08 #1
Før du bruger alt for mange kræfter:

Er det proceduren laver understøtet af indeks (typisk på where / join kriterier og sorteringer (union/group by/ IN () udtryk) ?

Hvis ikke - så læg indeks på.

Hvis du har indeks - hvornår har du så sidst opdateret statistikkerne?  Oracle opdaterer jo ikke statistikker automatisk.
Avatar billede d_warma Nybegynder
31. marts 2004 - 15:19 #2
Det er en del procedure i en større procedure.
Del proceduren kører mellem to mappings, hvor jeg kan se, at der går x antal minutter fra mapping før stopper (og her kører del-proceduren) til den næste mapping starter.

Der er index på de relevante tabeller og statistikker bliver computed hver gang hele proceduren bliver kørt. (flere gange om dagen).

Så mit spørgsmål går vel mere på, om man kan underopdele proceduren og se hvad der tager tid?
Avatar billede trer Nybegynder
31. marts 2004 - 15:31 #3
Nemmeste er vel at oprette en log tabel - og i proc'en sætter du så et antal

INSERT INTO LOGTABEL (WHEN,WHAT) (SYSDATE,'Nu gør vi dit')

statements ind.

Så får du en log med info du kan vurdere ud fra.

Hvis du har Quest Toad mener jeg også at der er nogle performancetuning værktøjer du kan kigge på - bl.a. mulighed for at få en execution plan ud så du kan se hvad Oracle reelt set har fundet på.

Jeg er bare ikke så stiv i det længere - ved at være mere end et år siden jeg har rørt Oracle sidst...
Avatar billede d_warma Nybegynder
31. marts 2004 - 15:37 #4
Jeg har lige sat et job over der kører resten af dagen.
Jeg er væk frem til mandag, så må jeg forsøge mig der.
Avatar billede Slettet bruger
31. marts 2004 - 17:44 #5
Det bedste ville vel være at sætte sql_trace på, men det kræver at du har adgang til serveren og kan finde ud af at bruge tkprof. Se hvordan på http://www.adp-gmbh.ch/ora/tuning/tkprof/

Du behøver ikke at lave en logtabel. Du kan nøjes med at skrive ud via DBMS_OUTPUT.PUT_LINE. (husk SET SERVEROUT ON SIZE 1000000).

Hvilken omgivelse arbejder du i?
Avatar billede d_warma Nybegynder
18. maj 2004 - 13:29 #6
Jeg lukker spg. Joern h får 50 point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester