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

Administration Oracle Discussion :

Temps d'exécution d'un vue


Sujet :

Administration Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut Temps d'exécution d'un vue
    Bonjour tout le monde;

    j'ai un select * from une VUE qui contient à l'intérieur une requête qui ramène à son tour depuis une autre VUE,

    (cette dernière contient un UNION des deux tables)

    mon problème c'est que lorsque j’exécute mon Select sur la vue pour la première fois, ça prends plus de 40 seconds pour afficher le résultat, après quelque seconds je ré-exécute le select ça prend seulement 16 seconds !

    quelqu'un aura la gentillesse à m'expliquer ? sinon existe-t'il des astuce ou des conseils directes pour optimiser mieux des requêtes

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    En règle générale, ces différences de rapidité sont liées au Buffer Cache.

    En clair, lors de la première exécution, Oracle regarde dans le Buffer Cache de la SGA si les blocs de données / index des tables sont présents ou pas. Comme c'est la première exécution, en général ces blocs ne sont pas en mémoire, et il faut donc aller les lire sur le disque, d'où les 40 secondes.

    A la seconde exécution, les blocs de données / index étant en mémoire, on évite donc les IO disques, d'où une requête plus rapide.

    Pour finir, ces blocs vont rester en mémoire tant qu'il y a assez de la place dans le Buffer Cache. D'autres requêtes sont en cours d'exécution, et vont elles aussi avoir besoin de place mémoire. Lorsqu'il n'y en a plus assez, Oracle fait de la place suivant un algorithme de type LRU (Least Recently Used). En clair, les blocs qui n'ont pas servi depuis longtemps sont supprimés du Buffer Cache, pour faire de la place.

    Du coup, lorsque une requête aura besoin d'accéder à ces blocs, rebelotte : lecture disque et donc perte de temps.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 998
    Points : 2 501
    Points
    2 501
    Par défaut
    Avec un AUTOTRACE, tout devient plus compréhensible :-)

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Les VUES, c'est le mal !!

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    cette dernière contient un UNION des deux tables
    UNION ou UNION ALL ?
    Dans le premier cas est-il nécessaire ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Waldar Voir le message
    UNION ou UNION ALL ?
    Dans le premier cas est-il nécessaire ?

    UNION ALL !!!

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Du coup pas mieux que les collègues, vos profitez des divers mécanismes de caches lors des exécutions successives à la première.

    Pour votre question sur l'optimisation des requêtes, de manière générale on cherche à :
    1. Minimiser les I/O
    2. Minimiser la consommation CPU
    3. Minimiser les temps d'exécution


    La bonne nouvelle c'est que le point 3 découle quasi systématiquement toujours des points 1 et 2.

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    Bonjour tout le monde;

    j'ai un select * from une VUE qui contient à l'intérieur une requête qui ramène à son tour depuis une autre VUE,

    (cette dernière contient un UNION des deux tables)

    mon problème c'est que lorsque j’exécute mon Select sur la vue pour la première fois, ça prends plus de 40 seconds pour afficher le résultat, après quelque seconds je ré-exécute le select ça prend seulement 16 seconds !

    quelqu'un aura la gentillesse à m'expliquer ? sinon existe-t'il des astuce ou des conseils directes pour optimiser mieux des requêtes
    le hard parsing la première fois coûte cher

    si cela se repère quelle est la valeur de cursor_sharing ?

    la cash pas la solution car il peut disparaître selon la taille de la SGA et la fréquence d'appel à la vue

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    le hard parsing la première fois coûte cher

    si cela se repère quelle est la valeur de cursor_sharing ?
    je comprends pas ici désolé, tu peux détailler?

Discussions similaires

  1. Temps d'exécution d'une vue
    Par mic79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2005, 16h50
  2. [C#] Calcul du temps d'exécution.
    Par lozzko dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2005, 16h12
  3. Réponses: 2
    Dernier message: 25/05/2004, 15h33
  4. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

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