IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Temps de traitement 8i et 10g


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut Temps de traitement 8i et 10g
    Bonjour à tous,
    je suis face à un soucis sur ma base de donnée Oracle, j'exécute en ce moment des tests de Select, insert, et update pour une future migration vers 10G. Et le même code, et même donnée je me retrouve avec des temps de traitement de 2 à 3 fois plus long. Sur Oracle 8i le traitement dure environ 6 min pour 100000 ligne et 15 min pour la 10g (10.2.0.5). J'ai essayé les différents patchs de la 10G et même problème.

    J'ai réussi à gagner 4 min en mettant le cursor_sharing = FORCE, même je suis encore loin du temps de traitement de la 8i sachant que je doit effectuer des traitements qui mettaient environ 3h sur la 8i

    Avez vous déjà rencontrer ce problème ? Si oui quel est le moyen de le régler ? des paramètres à changer dans l'ouverture de la base? la 11g règle t'elle ce soucis ? Bref une solution ^^

    Merci à tous.

    Ps : Je ne joins pas le code puisqu'il s'agit du même pour la 8i et la 10g, il n'a donc pas d'influence sur le temps de traitement
    Pourquoi faire simple quand on peut faire .......... compliqué

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Bonjour,

    Avez vous essayé de faire ceci dans votre nouvelle base de données(10g)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter session set optimizer_features_enable='8.1.7';
    Et de voir les nouveaux temps de réponse de vos requêtes?

    Beaucoup de choses ont changé entre la version 8 et 10g si bien que, dans un premier temps, je pense c'est ce qu'il y a de mieux à faire.

    Jonathan Lewis dans son livre "Cost Based Oracle Fundamentals" consacre un annexe intitulé "Upgrade Headaches" où il a résumé la majeur partie des problèmes qu'une migration de 8i vers 10g peut produire en partant du calcul des statistiques (dbms_stats au lieu de analyze), le nouvel algorithme du group by, etc...



    Par ailleurs, vous dites que vous avez mis la valeur du cursor_sharing à FORCE ce qui vous a permis de gagner 4 minutes. Pourriez vous nous donner plus de détails sur les traitements que vous faites afin que l'on puisse vous expliquer pourquoi il va falloir éviter de forcer le cursor_sharing

    Bien respectueusement

    Mohamed Houri
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 91
    Points : 138
    Points
    138
    Par défaut
    • Les bases sont sur un serveur comparable ?
    • Les statistiques sont à jour des deux côtés ?

  4. #4
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Bonjour,

    En faite je ne fait que poursuivre le travail d'un collègue et c'est lui qui avait pris l'initiative de mettre le = FORCE, je ne peut pas vraiment vous en dire plus.

    Concernant les serveurs se sont tous les 2 des VM avec windows 2k3 dessus, avec les mêmes ressources bien entendu

    J'ai une autre précision, j'utilise actuellement le logiciel spotlight pour superviser ma base de donnée 10G et je remarque qu'au lancement de ma procédure j'ai un problème au niveau du parse qui ralentit le nombre de requête traité je passe de 300 à 120/150 environ ...

    voici l'algo de ma procédure (il s'agit d'un programme VB.NET) :

    la base 1 est une base progress
    la base 2 est soit la base en 8i soit la base en 10G


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Début du programme
    	Connexion à la base 1
    	Récupération de données base 1
     
    	Connexion à la base 2
    	Début de la transaction
    		Essayer
                                          suppression des données base 2 table 1
                                          Insertion des données base 1 dans base 2 table 1
    			Validation
    		Sinon
    			Annulation
    	Fin de la transaction
    Fin du programme
    Je vais tester ta proposition Mohamed ... si vous souhaitez plus de précision
    Pourquoi faire simple quand on peut faire .......... compliqué

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Vu que vous faites deux traitements differents dans les bases Oracles (8/10), vous pourriez regarder le temps que ca prend pour chacune des operations?

    Le temps passe a supprimer dans 8i, et pareil pour 10g. Et la meme chose pour l'insertion des donnees.
    Ca peut eventuellement montrer que le probleme ne vient que de l'insertion ou que de la suppression, ou a defaut que c'est plus lent partout.

  6. #6
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Autant pour moi je n'ai pas précisé, j'ai des fichiers de logs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sur 10G
    18/07/2011 15:10:59: #################### Début intégration #################### : 
    18/07/2011 15:10:59: Connexion BASE1 OK : 
    18/07/2011 15:10:59: Connexion BASE2 OK : 
    18/07/2011 15:10:59: Début récupération ZARTFAB : 
    18/07/2011 15:10:59: Fin récupération ZARTFAB : 
    18/07/2011 15:10:59: Début suppression ZARTFAB dans BASE2 : 
    18/07/2011 15:11:02: Fin suppression ZARTFAB dans BASE2 : 
    18/07/2011 15:11:02: Début insertion ZARTFAB dans BASE2 : 
    18/07/2011 15:21:49: Fin insertion ZARTFAB dans BASE2 : 
    18/07/2011 15:21:49: #################### Fin intégration #################### :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sur 8i
    Intégration dans ZARTFAB2 de BOAC5 PROD oracle 8i (5min 48)
    18/07/2011 10:33:19: #################### Début intégration #################### : 
    18/07/2011 10:33:19: Connexion BASE1 OK : 
    18/07/2011 10:33:19: Connexion BASE2 OK : 
    18/07/2011 10:33:19: Début récupération ZARTFAB : 
    18/07/2011 10:33:19: Fin récupération ZARTFAB : 
    18/07/2011 10:33:19: Début suppression ZARTFAB dans BASE2 : 
    18/07/2011 10:33:38: Fin suppression ZARTFAB dans BASE2 : 
    18/07/2011 10:33:38: Début insertion ZARTFAB dans BASE2 : 
    18/07/2011 10:39:26: Fin insertion ZARTFAB dans BASE2 : 
    18/07/2011 10:39:26: #################### Fin intégration #################### :
    Donc a priori cela vient de l'insertion ...
    Pourquoi faire simple quand on peut faire .......... compliqué

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 91
    Points : 138
    Points
    138
    Par défaut
    Ton tablespace de rollback est configuré pareil ?

  8. #8
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    quel est le rapport ?

    De toute façon c'est un import/export donc les 2 bases de données sont sensé être exactement les mêmes.

    J'ai remarqué grâce à spotlight que pendant 1 minutes environ tout se passe bien, 300 SQL exec/s et 600 parse req/s au niveau du shared pool puis au bout d'un certains temps le CPU s'enflamme 70 % au lieu de 40 % et le parse descend à 400 et le SQL exec arrive à 100/150 , je soupçonne le sharedpool plein cependant il ne m'affiche que 50% d'utilisations ...
    Pourquoi faire simple quand on peut faire .......... compliqué

  9. #9
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par jlm22 Voir le message
    quel est le rapport ?
    je soupçonne le sharedpool plein cependant il ne m'affiche que 50% d'utilisations ...
    C'est pourquoi lorsque le cursor_sharing a été mis à FORCE vous avez gagné un peu de temps. C'est la non utilisation des "bind variables" qui consomme beaucoup de cpu et rempli le "shared pool".

    Que donne la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(1)
    from v$sql
    where executions <=2;
    Il y a certainement beaucoup d'instructions sql qui ne sont pas partagées (re-executés)

    Bien à vous

    Mohamed Houri
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pour de bonne performance il faut évidemment utiliser des binds variables comme l'a diagnostiqué Mohamed.Houri.
    Cependant "300 SQL exec/s et 600 parse req/s", laisse supposer qu'en plus de l'absence de binds variables, l'insertion se fait ligne à ligne, ce qui est également contre performant.

    L'idéal est d'utiliser uniquement du SQL via un dblink par exemple, mais en VB.NET il faudrait que tu fasses des recherches sur le BULK INSERT qui dépendront probablement du driver utilisé, le gain en performance sera très conséquent quelque soit la version d'oracle 8i ou 10g.
    Je ne connais pas .NET mais ça semble possible :
    [ame="http://www.google.fr/search?hl=fr&source=hp&biw=1159&bih=934&q=vb.net+oracle+bulk+insert&aq=f&aqi=&aql=f&oq="]vb.net oracle bulk insert - Recherche Google[/ame]

  11. #11
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Le "300 SQL exec/s et 600 parse req/s" me convient amplement au niveau des performance, j'aimerais juste pouvoir réalisé c'est même performance en 10G.


    C'est pourquoi lorsque le cursor_sharing a été mis à FORCE vous avez gagné un peu de temps. C'est la non utilisation des "bind variables" qui consomme beaucoup de cpu et rempli le "shared pool".
    si j'ai bien compris je dois donc baisser la tailler du shared pool pour de meilleur performance, non ? de quel taille doit être le shared pool ?

    voici le résultat de la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select count(1)
      2  FROM v$sql
      3  WHERE executions<=2;
     
      COUNT(1)
    ----------
           968
    Pourquoi faire simple quand on peut faire .......... compliqué

  12. #12
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Bonjour,

    Non, je n'ai pas suggéré un changement du shared pool si tant est que ce changement vous apportera quelque chose. En effet, lorsque vous n'utilisez pas les "bind variables" les mêmes instructions sql ne sont pas reutilisées (968 instructions sql sont exécutées au maximum 2 fois), ceci a comme effet de remplir le shared pool et de générer une consommation excessive de CPU et de "Physical I/O".

    Je pense, comme je vous l'ai suggéré la première fois, la meilleure chose à faire dans votre cas, c'est de changer l'optimisateur à sa version '8.1.7' et de voir si vous retrouvez en 10g les temps de performance de la 8i.

    Dans une deuxième étape, vous devez améliorer la performance de votre programme en utilisant des bind variables et du SQL(si c'est possible) au lieu du PL/SQL. Par exemple, préferez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
      Insert into t1
      select from t2
      where ..;
     
      COMMIT;
    END;
    à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BEGIN
    FOR x in (select * from t2)
    LOOP
      insert into t1()
      values (x., x.);
     
    END LOOP;
    COMMIT;
     
    END;
    En ce qui concerne l'utilisation des bind variables, je vous conseille de rassembler toutes vos intructions SQL dans une procédure stockée et d'appeler celle-ci via votre client (.Net ou VB).

    Le PL/SQL static (procédure stockée) a comme avantage que tout ce que vous mettez dedans est "auto-bindé"; c'est à dire que lorsque vous utilisez les procédures stockées vous êtes sûr d'avoir utilisé les bind variables à une seule et importante condition : lorsque vous appelez cette procédure via votre client .Net veuillez à bien l'appeler avec des "bind variables"

    Bien respectueusement

    Mohamed Houri
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  13. #13
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Merci pour votre intérêt à mon problème, mais comment expliquez-vous la fait que les bind variables ai plus d'influence pour la 10G que pour la 8i ? Car il s'agit du même programme qui est exécuté sur la 8i .... J'avoue être étonner que cela vienne de l'algorithme.

    Le "ALTER session SET optimizer_features_enable='8.1.7';" n'a rien changé.

    Cordialement,
    Pourquoi faire simple quand on peut faire .......... compliqué

  14. #14
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Si les "bind variables" n'étaient pas utilisées en 8i, elles ne seront pas utilisées également en 10g (sans un changement de votre part).

    Puisque le retour à l'ancien optimisateur n'a rien donné, pourriez vous alors activer les traces (10046 level 12) afin de voir comment votre temps de traitement est consommé.

    Bien cordialement

    Mohamed Houri
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  15. #15
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Bon j'ai décidé de modifier mon programme, an ajoutant des requêtes paramétrées dans VB grâce à OracleParameter.

    Le résultat est assez impressionnant seulement 2 min pour tous insérer

    Bref, merci pour votre aide
    Pourquoi faire simple quand on peut faire .......... compliqué

  16. #16
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par jlm22 Voir le message
    Concernant les serveurs se sont tous les 2 des VM avec windows 2k3 dessus, avec les mêmes ressources bien entendu
    Bon, le noyeau Oracle grandit à chaque version, ainsi que les besoins de mémoire en général.

    ce qui pouvait tourner avec 500 még en 8i risque d'être insuffisant en 10g.

    Aussi, quelle drôle d'idée de migrer d'une version complètement obsolète (du siècle passé) en une version qui n'est déjà plus en support premium depuis 2010 !

    11gR2 s'impose!

  17. #17
    Membre habitué Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Points : 148
    Points
    148
    Par défaut
    Arf fausse alerte le problème n'est qu'à moitié régler ! Y'a t-il des paramètres a ajouter pour avoir les mêmes performance d'une 8i à une 10g ?
    Pourquoi faire simple quand on peut faire .......... compliqué

  18. #18
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2007
    Messages : 419
    Points : 616
    Points
    616
    Par défaut
    Bonjour,

    il n'y a évidemment pas de paramètre magique. en 11g non plus
    elle marchait comment la base en 8? en mode rule?
    le CBO est un énorme changement dans le traitement des requêtes. l'essentiel est d'avoir des stats très à jour sur les objets afin qu'oracle choisisse le bon chemin pour exécuter les requêtes le plus efficacement possible.
    pouvez-vous nous poster un comparatif des events sur la base en 8i et sur la base en 10g au moment du traitement? un awr sur la période de test et un awrsqrpt sur la requête seraient très instructifs

  19. #19
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    je suis assez pas d'accord... en 10g , 11g il y a beaucoup de parametre magique qui font tout pour toi (style SGA_TARGET et PGA_AGGREGATE_TARGET) ainsi que l'UNDO tablespace, le locally managed, l'automatic segment space management et beaucoup d'amelioration interne.

    Pour cost based, revois tes stats

    Le OPTIMIZER_MODE=rule existe toujours mais n'est plus supporte

    A+

  20. #20
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2007
    Messages : 419
    Points : 616
    Points
    616
    Par défaut
    mouais, magique pour le dba qui a moins de taf ?
    la meilleure des optimisations passe par une revue du schema et/ou réécriture des requêtes d'après ce que je constate au quotidien. oui, l'administration n'aurait presque plus besoin de dba mais le code reste le point névralgique

Discussions similaires

  1. Utilisation JProgressBar & temps de traitement incconu
    Par greg1602 dans le forum Composants
    Réponses: 22
    Dernier message: 30/11/2005, 20h52
  2. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  3. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14
  4. [Perf]Utilisation des Logger et temps de traitement ?
    Par elitost dans le forum Logging
    Réponses: 6
    Dernier message: 12/04/2005, 23h13
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo