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 :

Faut-il éviter de paralléliser ?


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 52
    Points
    52
    Par défaut Faut-il éviter de paralléliser ?
    Bonjour ,
    En 11g , j'ai parallélisé 3 requêtes SELECT complexes R1 R2 R3 ce matin avec un degré 10.

    Temps avant // :
    R1 : 1H
    R2 : 1H20
    R3 : 40min
    Temps après // (une après l'autre) :
    R1 : 12min
    R2 : 16min
    R3 : 5min

    Temps après // (les 3 simultanément) :
    R1 : 1H10min !!!
    R2 : 1H30min !!!
    R3 : 50min !!!

    Constat : Dégradation des perfs si les 3 SELECT s'exécutent en même temps et en //.
    Qu'elle solution pour éviter cette dégradation ?
    merciiii

  2. #2
    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,

    Ben faites les select parallélisés à la suite, pas en même temps.

    Vu le grand nombre de questions que vous vous posez sur Oracle et la performance, je vous conseille de faire un peu de lecture, vous gagnerez un temps immense en plus d'avoir l'impression de savoir ce que vous faites.

    http://docs.oracle.com/cd/E11882_01/...e10822/toc.htm

    Et dans un second temps:
    http://docs.oracle.com/cd/E11882_01/...e16638/toc.htm

    Il y a également de très nombreuses ressources en français sur developpez.net grâce au travail de quelques membres.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    ne jamais trop paralléliser. En effet à un moment donné il faut passer du mono au multithread et inversement. Au moment du rassemblement des threads ceci induit des temps d'attente car aucun des thread en // ne finit en même temps. Conclusion : trop de parallélisme tue le parallélisme.

    Refaites des essais avec 2, 4 et 8 core.

    Enfin tout dépend aussi de votre architecture hardware. Avec une machine à 4 noeuds NUMA de 4 coeurs, il ne faut pas dépasser 4 en // car sinon vous risquez des temps d'attente d'intercommunication entre CPU.

    Si en plus vous êtes virtualisé.... catastrophe !

    Pour plus d'informations, lisez la chapitre Administration de mon livre sur SQL.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Rams7s Voir le message
    Bonjour,

    Ben faites les select parallélisés à la suite, pas en même temps.
    Je voulais tester un cas concret où 3 utilisateurs lancent 3 SELECT parallélisées en même temps.
    Pour info j'ai une machine avec 4 CPU.

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par tropiko Voir le message
    Constat : Dégradation des perfs si les 3 SELECT s'exécutent en même temps et en //.
    Qu'elle solution pour éviter cette dégradation ?
    merciiii
    Ne pas paralléliser ! Ou paralléliser à un degré inférieur à votre nombre de CPU x nombre d'utilisateurs simultanés.

    Voyez vos requêtes comme des convois de camions, et les CPUs comme des péages. Vous avez 4 péages, et un seul train de camions : ça risque fort d'aller plus vite s'il passe par les 4 péages que par un seul. Il y a de la déperdition en amont et en aval pour diviser / remettre le convoi en bon ordre, mais le temps de passage est divisé par 4. Au final avec un bon manager et un convoi facilement divisible, on peut gagner beaucoup de temps.

    Maintenant, vous avez 3 convois en même temps : là ça devient franchement le bordel ! Non seulement la contention est quasiment identique en séparant chaque convoi sur les 4 péages qu'en les assignant chacun à 1 péage, mais du coup les temps en amont et en aval deviennent juste de la charge en plus - et il faut que les managers de chaque convoi s'entendent, etc. Bref, globalement on va plus perdre du temps qu'autre chose à vouloir paralléliser.

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Le but de paralléliser, c'est d'utiliser au maximum les ressources d'une machine. Mais si on parallélise trop, au contraire on amène de la contention.

    Ici lorsque les 3 requêtes tournent en même temps, vous avez: 10 * 3 = 30 process qui travaillent en parallèle. Imaginons que ces requêtes travaillent 60% de leurs temps en CPU et 40% de leur temps en i/o, alors en moyenne, il y aura une charge de 18 en CPU. Donc c'est ok si vous avez 20 cores, par contre il y aura contention (attente en runqueue) si vous n'en avez que 4.

    Même raisonnement sur les i/o: y a-t-il assez de disque pour tenir ces demandes d'i/o

    Le calcul est très hypothétique (c'est sur des moyennes, mais l'activité peut être très variable). Pour déterminer le degré de parallélisme optimal, il faut surveiller la charge du système.

    Mais il peut aussi y avoir d'autres raisons.
    Suivant la configuration du parallélisme, Oracle peut se retrouver à changer le degré demandé, voire lancer la requête en serial. Ces mécanismes peuvent permettre d'adapter le degré en fonction de la charge.

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

Discussions similaires

  1. Faut-il éviter de distraire les débutants avec l'orientée objet ?
    Par tarikbenmerar dans le forum Actualités
    Réponses: 165
    Dernier message: 26/07/2014, 20h53
  2. Réponses: 25
    Dernier message: 04/03/2008, 16h15
  3. Faut-il éviter BDE ?
    Par Ostap Bender dans le forum C++Builder
    Réponses: 4
    Dernier message: 23/11/2007, 18h04
  4. Ce qu'il faut sous la main.
    Par ShinMei dans le forum DirectX
    Réponses: 2
    Dernier message: 18/01/2003, 14h12
  5. Réponses: 2
    Dernier message: 23/12/2002, 20h34

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