Toon posts:

[Oracle] Performance probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi, het is misschien wat specifiek probleem, maar wie weet zitten hier wel Oracle freaks die me kunnen helpen.

Een bepaalde handeling in de client bestaat uit een lus (die door een gridje loopt) waarin een package functie opgeroepen wordt per doorloop.
Op onze testserver loopt dit vlot (280 doorlopen in 30 seconden), maar bij de klant gaat dit veel trager (280 doorlopen in 2 minuten). Dus ik start een oracletrace.
Alle SQLs hebben een vlotte doorlooptijd (<0.01s), behalve eentje, die ik niet kan plaatsen:

BEGIN SYS.DBMS_DESCRIBE.DESCRIBE_PROCEDURE(:object_name,:res1,:res2,:overload,
:position,:level,:argument,:datatype,:default,:in_out,:length,:precision,
:scale,:radix,:spare); END;

die heeft een doorlooptijd van 0.04s per keer bij de klant en 0.00s bij ons. Deze SQL is volgens mij niet data-gerelateerd. (bij een select op een tabel zou je nog kunnen zeggen dat die trager gaat bij de klant om dat daar meer data zit)

Heb alles gecheckt ivm vollopen tablespaces, grote logfiles, indexes,... geen fouten hier.
Ik had al een tip op het internet gevonden, en die was om de package te "pinnen" oftewel in de shared_pool geheugen te houden. met "execute sys.dbms_shared_pool.keep('MIJNPACKAGE')" maar dit maakt het niet sneller...

iemand nog tips?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Heeft de klant misschien meerdere applicaties in dezelfde database staan?

Die describe procedure doet ook gewoon selecties op de data dictionary, die langer kunnen duren als er meer in zit. Meer objecten geeft dus ook meer data.

Als alternatief kun je misschien zelf selecteren uit onderliggende data dictionary views zodat je je loop misschien kunt elimineren.

Who is John Galt?


  • EfBe
  • Registratie: Januari 2000
  • Niet online
waarom wordt describe aangeroepen? Je kunt met losse queries op verschillende views veel sneller diezelfde info eruit takelen en die loop vermijden zoals justmental aangeeft.

bv om alle parameters van alle procs in een schema op te halen:
SELECT OBJECT_NAME AS PROC_NAME, PACKAGE_NAME, ARGUMENT_NAME, POSITION, DATA_TYPE, IN_OUT, DATA_LENGTH, DATA_PRECISION, DATA_SCALE FROM ALL_ARGUMENTS WHERE OWNER=:schema AND DATA_LEVEL =0 ORDER BY PACKAGE_NAME, OBJECT_NAME, POSITION

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com