22. august 2010 - 21:54Der er
19 kommentarer og 1 løsning
Langsom forspørgsel via java, men ik via TOAD
Hej
jeg har en oracle pl/sql stored procedure jeg kalder med nogle parameter fra mit javaprogram. Forspørgslen returnerer ca 200 rækker. Når jeg kører den via javaprogrammet tager den ca 5 min før den er færdig. Men hvis jeg kører den fra TOAD med de samme parameter så tager den ca 30 sekunder. hvad kan det skyldes?
Fandt muligvis løsningen fredag på arbejde, men nåede ik at gennemteste det helt. Men den stored procedure jeg har problemer med modtager 3 parameter, nemlig 1 varchar2 og 2 date typer. Men da jeg ændrede date til timestamp virkede det somom at den kørte nøjagtig som i TOAD. Jeg ved ik hvorfor det skulle være løsningen måske du ved det? Når jeg har kørt den i TOAD har jeg nemlig bare hardcoded parameterne til to_date('31-12-2009', 'dd-mm-yyyy')
Kunne det ikke være et alternativ at at du smider din procedure over i en ny tråd. På den måde vil brugeren af dit program ikke bemærke den lange svartid. jeg tænkte bare at hvis man ikke kan finde en umiddelbar forklaring så må man jo forbedre brugervenligheden.
fandt ud af min løsning ikke virker alligevel, nu er den langsom igen, virkelig underligt. Det unnderlige er at nogle gange så kører den fint (lige hurtigt i TOAD og java) men så tilfældigt en gang i mellem, så er den ufatteligt langsom via java, men kun via java.
kan ik gøre det på arbejdet, da jeg ikke har rettigheder, men har en kopi derhjemme hvor jeg godt kan, må bare vente til den er langsom der.
Jeg har dog måske løst det, da den driver jeg bruge hed ojdbc14.jar og nu hentede jeg en der hed ojdbc6.jar og den gør at forespørgslen nu er færdig på under 1 sek, hvor den før tog 7 sek når jeg kørte den her hjemme. lidt vild hastighedforbedring synes jeg. nogle kommentar til det? det er oracle 11g jeg bruger
Fandt ud af at den ikke er blevet så meget hurtigere, men efter jeg bruger den nye driver så start fetch først når jeg begynder at læse rækkerne, men med den gamle driver begynder den at fetch med det sammen åbenbart
aaaahh okay, troede 14 var til oracle 10 og før og ojdbc var til oracle 11g. min java version er 6, så måske derfor den har været langsom. Det skal dog lige siges at jeg connecter via OCI, så min connectionstring ser sådan ud: rapCon = DriverManager.getConnection("jdbc:oracle:oci:@ORCL","RRITU","rritu");
så jeg kan ikke helt finde ud af hvor driver ligger som jeg bruger. altså fordi at OCI driveren vel ligger i et oracledirectory på min computer, men alligevel har jeg også tilføjet ojdbc6.jar til min javakode i netbeans?
prøve den på arbejdet nu, og der er den staadig langsom selvom jeg bruger ojdbc6, i min javakode kalder jeg en stored procedure, hvis jeg istedet smider SQL'en direkte ind i java koden og kalder den som "normal" SQL og IKKE en stored procedure, så er den ikke langsom...????
fandt ud af det det måske kan være tilfældigheder der gør det. kan se i toad at den nogle gange har en "latch: cache buffers chains" når den laver det nummer
fandt ud af at det var execution plan der var forskellig. da oracle brugte den samme til den stored procedure lige meget vilke parameter den fik. da jeg bruge bind variables og det gjorde jeg ikke ved toad. men tak for indsatsen
Synes godt om
Ny brugerNybegynder
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.