Avatar billede lbaad Nybegynder
08. april 2008 - 16:27 Der er 5 kommentarer

Forkert explain plan

Hej
Jeg har en procedure, som ikke kan køre mere.
Efter ca. 15 minutter, så fejler scriptet med:
ORA-1652: unable to extend temp segment by 128 in tablespace                TEMP
TEMP tablespacet er 24 GB stort, og det er global temporary tables, som jeg forsøger at indsætte rækker i.
Jeg forsøger at indsætte 62500 rækker i tabellen og joiner på tværs af flere tabeller.
Jeg har ikke, at jeg ved af, lavet ændringer på databasen.

Det er iøvrigt forskellige explain planer, når jeg kører sql'en i henholdsvis i TOAD og via JAVA.

Når jeg kører scriptet i TOAD, så bruger det ca. 1 minut, og så er den færdig succesfuldt.

Når jeg kører proceduren via JAVA, så fejler den.

Det er iøvrigt forskellige explain planer, når jeg kører sql'en i henholdsvis i TOAD og via JAVA.

Ved godt det er meget sparsomt med oplysninger, men skriv, så skal jeg forsøge at indhente informationer.

mvh
Lars
Avatar billede Slettet bruger
09. april 2008 - 08:39 #1
Det lyder som om at Java og TOAD arbejder med forskellige language settings og at der derfor laves ekstra konvreteringer i JAVA-versionen. På grund af den forkerte language setting vil Oracle derfor skulle lave ekstra sorteringer, for at få data sortere anderledes end binary sort order.

Er der nogen med andre gode ideer?
Avatar billede teepee Nybegynder
09. april 2008 - 08:59 #2
er det en anonym procedure? Måske at du skal gemme den i basen som en pl/sql procedure og afvikle den. Det skulle gerne give samme resultat fra TOAD/Java/m.v.
Dit kæmpe TEMP tablepsace er måske ikke trunkeret. Andre sessioner kan benytte samme tablespace mens du bruger det. Mængderne tyder på at du mangler en join og får at katetisk produkt.
Avatar billede lbaad Nybegynder
09. april 2008 - 13:13 #3
joern_h -> Det kan godt passe, at de kører med forskellige language settings, men vil det gøre, at den er så langsom?
Avatar billede lbaad Nybegynder
09. april 2008 - 13:17 #4
teepee -> Det er ikke en anonym procedure. Den ligger allerede i basen, og har altid gjort det.
TEMP tablespaceet er trunkeret når jeg starter, men bliver fyldt rimelig hurtigt.
Når jeg kører i TOAD, så skrive den, at der er en masse nested loops. Når jeg kører via JAVA, så kommer der et katetisk produkt.

Vil i se SQL'en, som laver udvælgelsen?
Avatar billede lbaad Nybegynder
10. april 2008 - 15:20 #5
Jeg har fået løst det.
Det kan være fordi vi kører med Thin client version 9, men på den anden side, så har det virket.
Lige nu var løsningen, at sætte et hint på SQL'en, så den ikke kørte All_rows, men istedet kørte nested_loops /*+ join_nl */, så kom Cost'en ned på 31k.
nu kører statementet uden problemer igen.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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