Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/07/2005, 13h08   #1
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Par défaut Performance d'un traitement PL/SQL

J'ai un problème de performance sur ma base Oracle 9.2.0.5.

J'ai un traitement PL/SQL qui dure environ 30 secondes.

- Lorsqu'il est exécuté 1000 fois dans une session différente il dure toujours 30 secondes environ même après 1000 exécutions.

- Lorsqu'il est exécuté 1000 fois dans la même session chaque exécution prend plus de temps, a 200 exécution j'arrive a environ 10 minutes pour chaque traitement. Autant dire que je n'arrive jamais au bout !

Avez-vous un idée de l'origine du problème ?
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 13h11   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
sans savoir ce qu'il fait ni comment aucune chance qu'on puisse t'aider
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 13h50   #3
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Aïe c'est dur a expliquer.

C'est un traitement sur des objets de la base.
Il y a plus de 6000 lignes de code PL/SQL.

Mais je me demande un truc l'exécution de :

SELECT count(*) FROM dual WHERE 1 = 1

prend-elle beaucoup plus de ressources qu'un

IF 1 = 1 THEN
true
ELSE
false
END

Merci d'avance
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 13h57   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
bien sûr :

count(*) -> du tri
SELECT -> moteur Oracle en plus du moteur PL/SQL

Quelle drole d'idée de faire de telles choses
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 14h11   #5
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Héhé et oui mais qui a eu cette idée ??? ;-)

Est-ce possible de faire une comparaison dynamique par exemple

condition := '1 = 1';

IF condition THEN
yes
ELSE
false
END IF;
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 14h34   #6
Membre du Club
 
Inscription : mai 2005
Messages : 134
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 134
Points : 50
Points : 50
IF 1=1

plutôt non ? (même si cela ne sert pas à grand chose
jokos2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 14h39   #7
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
oui mais de manière dynamique à la manière du

EXECUTE IMMEDIATE 'select ' || '1' || ' from dual' INTO resultat;
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 15h12   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par boxsters
Héhé et oui mais qui a eu cette idée ??? ;-)

Est-ce possible de faire une comparaison dynamique par exemple

condition := '1 = 1';

IF condition THEN
yes
ELSE
false
END IF;
quel intérêt ???
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 15h35   #9
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Eh bien tester une condition qui n'est pas dans le code mais dans la base sous forme de donnée !
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 15h51   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
qu'est ce que c'est que cette histoire

j'avais encore jamais entendu ça

Est-ce qu'il n'y a pas possibilité d'ajouter le contenu de la colonne à une requête... tu fais quoi dans ton IF ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h12   #11
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 13
Points : 10
Points : 10
On ne peut pas faire de la comparaison dynamique,
Le IF ....THEN prend une variable booléenne, ou une expression booléenne mais ne remplace pas les expressions chaines à la manière des macros et pré-processeur C/C++.

Afi
AFIJARODOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h13   #12
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
En fonction de la condition je démarre une procédure ou une autre si la condition est fausse.

Comme je l'ai dit je travaille avec les objets et leurs méthodes donc ça peut paraître atypique.
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h16   #13
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Merci AFIJARODOX pour cette réponse claire et précise.

Je m'en vais donc pondre un autre bout de code !!

A tchao

Bon week-end
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h17   #14
Candidat au titre de Membre du Club
 
Inscription : août 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 13
Points : 10
Points : 10
J'ai connu un projet comme ça,
dans lequel on génère nous même du code pour le faire exécuter (pré-compiler,...).
Ca n'a pas toujours été la gloire

Afi.
AFIJARODOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h19   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est un problème de conception pour moi, pas étonnant qu'il y a des problèmes de perfs

On ne peut pas faire tous avec l'importe quoi, typiquement ici, la solution technique n'est pas adapté à l'outil... bon courage
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h44   #16
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Donc utiliser les objets dans Oracle ce n'est pas un bon outil pour toi.

C'est un point de vue, j'en ai un autre.

Merci pour ton aide orafrance
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2005, 07h23   #17
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
les objets oui mais coder des conditions directement dans les tables n'est pas une bonne solution sous Oracle. En effet, tu as vu par toi même que tu devais passer par un ordre SELECT pour vérifier cette condition générant ainsi des commandes inutiles. D'autres SGBD sont peut-être plus adapté mais dans ce cas précis, Oracle souffrira forcément d'une telle modélisation.

Ceci étant, je te laisse le soin de persister ou non dans cette voie
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2005, 08h10   #18
Invité régulier
 
Inscription : décembre 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2004
Messages : 24
Points : 5
Points : 5
Ouais merci en tout cas pour ton aide.
boxsters est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h18.


 
 
 
 
Partenaires

Hébergement Web