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

PL/SQL Oracle Discussion :

Insert dans une vue trop long


Sujet :

PL/SQL Oracle

  1. #21
    Membre expérimenté
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    1 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 1 217
    Points : 1 407
    Points
    1 407
    Par défaut
    OK, ben à part faire une trace 10046, je ne vois plus rien.

    Il faut lancer les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER SESSION SET timed_statistics = TRUE;
    ALTER SESSION SET max_dump_file_size = unlimited;
    ALTER SESSION SET TRACEFILE_IDENTIFIER = 'zztest_insert.trc';
    ALTER SESSION SET events '10046 trace name context forever, level 4';
    L'ordre SQL à tracer.
    Ne pas oublier de désactiver la trace une fois l'ordre SQL exécuté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET events '10046 trace name context off';
    Interroger v$diag_info pour trouver le fichier de trace : vous noterez que je l'ai appelé zztest_insert.trc mais Oracle peut le préfixer avec un autre libellé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT value FROM   v$diag_info WHERE  name = 'Default Trace File';
    L'utilitaire TKPROF permet de rendre le fichier de trace brut plus lisible; attention, il y a un prix à payer, on perd les valeurs des bind variables dans le fichier généré.
    Sous Unix, lancer avec fichier.trc le nom retournée par le précédent SELECT et fichier.txt le fichier de sortie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tkprof fichier.trc fichier.txt
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #22
    Membre expérimenté
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    1 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 1 217
    Points : 1 407
    Points
    1 407
    Par défaut
    Un autre autre truc qu'il faudrait faire c'est une boucle de 10000 INSERT pour avoir une valeur moyenne du temps pris par ta commande.

    La commande ressemble à ça de mémoire :
    set timing on;
    BEGIN
    FOR i IN 1..10000 LOOP
    INSERT
    END LOOP;
    END;
    /
    set timing off;

    Puis tu divises le temps total par 10000.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #23
    Futur Membre du Club
    Homme Profil pro
    c++/Qt
    Inscrit en
    septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : septembre 2017
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je n'ai pas encore eu le temps de tester vos proposition.

    Par contre j'ai fais un petit test.

    J'ai inséré une première ligne => Ecoulé : 00:00:00.812
    Puis une seconde ligne => Ecoulé : 00:00:00.007

    Via SQLDevelopper.

    Par contre depuis le code c++ le temps est toujours a chaque INSERT supérieur a 500ms.

  4. #24
    Membre expérimenté
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    1 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 1 217
    Points : 1 407
    Points
    1 407
    Par défaut
    Dans ce cas, fait la boucle sous SQL Developer pour voir le temps moyen. Ensuite tu fais un rollback puis la même chose en C++ si possible, histoire de voir si c'est pas le code en C++ qui pose pb.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #25
    Futur Membre du Club
    Homme Profil pro
    c++/Qt
    Inscrit en
    septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : septembre 2017
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je ne comprend pas le comporte de Oracle..
    J'ai effectué votre boucle ... 3 x voici les résultats :

    Procédure PL/SQL terminée.

    Ecoulé : 00:03:46.757


    Procédure PL/SQL terminée.

    Ecoulé : 00:01:22.130


    Procédure PL/SQL terminée.

    Ecoulé : 00:09:33.809



    A chaque test de 10.000 insert j'ai un résultat complètement différent.


    Merci...

  6. #26
    Membre expérimenté
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    1 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 1 217
    Points : 1 407
    Points
    1 407
    Par défaut
    Et les 10 000 INSERT faits 3 fois l'ont été avec SQL Developer ou ton programme en C++?

    Visiblement il y a une forte activité sur ta base qui pollue les tests; es-tu seul sur cette base ou bien d'autres personnes sont connectées?

    De mon expérience, j'écarterai Oracle comme source du problème. Soit ta base est surchargée par les autres users soit c'est ton programme en C++ qui foire (oui, c'est facile à dire ).
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #27
    Futur Membre du Club
    Homme Profil pro
    c++/Qt
    Inscrit en
    septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : septembre 2017
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    C'est 3 tests ont été effectués via SQLDevelopper et non en c++. Ensuite je suis le seul à utiliser cette base de données... est elle est complètement vide.

  8. #28
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 817
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 817
    Points : 5 525
    Points
    5 525
    Par défaut
    Faîtes une trace 10046 level 12 pour voir les temps d'attente.

  9. #29
    Membre expérimenté
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    1 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DBA Oracle
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2013
    Messages : 1 217
    Points : 1 407
    Points
    1 407
    Par défaut
    Citation Envoyé par scary02820 Voir le message
    Bonjour,

    C'est 3 tests ont été effectués via SQLDevelopper et non en c++. Ensuite je suis le seul à utiliser cette base de données... est elle est complètement vide.
    Aïe, ça sent mauvais...
    Comme dit skuatamad, il faut faire une trace 10046 maintenant pour y voir plus clair.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

Discussions similaires

  1. [DB2] Temps de calcul via une vue trop long
    Par nathou38400 dans le forum DB2
    Réponses: 2
    Dernier message: 09/05/2011, 12h18
  2. Insertion dans une vue
    Par wissem.ba dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2011, 16h35
  3. Insert dans une vue avec une valeur par défaut
    Par adiGuba dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/07/2010, 16h12
  4. Réponses: 0
    Dernier message: 20/02/2008, 12h55
  5. insertion dans une BD trop lente
    Par jouidos dans le forum Windows Forms
    Réponses: 13
    Dernier message: 01/02/2007, 13h32

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