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

SQL Oracle Discussion :

Performance script PL/SQL


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Performance script PL/SQL
    Bonjour,
    Je travaille actuellement sur un script qui traite un volume très important de données (plusieurs millions d'enregistrement).
    Bien sûr la première version de ce script était très longue (plusieurs heures).
    Par conséquent, j'ai trouvé une manière d'améliorer les performances de celui-ci en appliquant une parallélisation maison.
    Pour être clair, je lance plusieurs fois le script et chaque parallèle ne traite qu'une partie des résultats fournit par le curseur principal.
    Et la question que je me pose, c'est qu'elle est le nombre optimal de parallèle sur lequel je dois lancer ce script ?
    Est-ce que plus le nombre est grand et mieux c'est ?
    Est-ce qu'il y a une limite ?
    Bref j'aimerais comprendre comment oracle gère toutes les requêtes qui lui sont demandées.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Votre question est certes précise mais le contexte est bien trop vague pour qu'on puisse répondre quoi que ce soit de pertinent.

    Merci d'apporter un peu plus de concret pour illustrer votre demande.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Pour être plus précis, le traitement en question sur 7 parallèle dure environ 6h.
    Sur 15 parallèle 2h30, sur 30 -> 1h et sur 91 -> 50 min.
    Ce que je ne comprend pas c'est que pour oracle même si il y a 50 scripts qui tournent en parallèle, il exécute le même nombre de requête que si il n'y en a qu'un qui est lancé.
    Pourtant, les performances sont bien meilleur avec beaucoup de parallèle.
    Autre point d'incompréhension, pourquoi avec 91 parallèles au lieu de 30 ont ne gagne que 10 min.

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    En deux mots, le parallélisme, natif ou fait maison, n'est pas magique.
    La grosse idée, c'est de faire tourner tous les coeurs de processeur simultanément.
    Si vous avez 32 coeurs, on peut dire grossièrement que vous pouvez supporter 32 traitements parallèles. Ça ne sert à rien d'essayer de monter à 50 traitements, car il y en a 18 qui feront la queue pour obtenir du temps CPU.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Merci pour ces explications. Dans mon cas, le processeur possède 4 coeurs, donc si je me fis à votre explication, les temps de traitement devraient être similaire dès que l'on dépasse 4 parallèles.
    Pourtant ce n'est pas le cas.
    Autre point, est-ce que les baies de disques peuvent également avoir un impact ?
    Merci d'avance.

  6. #6
    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
    Je travaille actuellement sur un script qui traite un volume très important de données (plusieurs millions d'enregistrement).
    Bien sûr la première version de ce script était très longue (plusieurs heures).
    Par conséquent, j'ai trouvé une manière d'améliorer les performances de celui-ci en appliquant une parallélisation maison.
    Comment êtes vous arrivez à savoir que votre problème de performance peut-être résolu en utilisant un traitement en parallèle?

    Tracez votre script avec l’évent 10046 et analysez le fichier trace généré. Partez sur des bases scientifiques et apportez les solutions qui conviennent sur la base de cette analyse.
    Bien Respectueusement
    www.hourim.wordpress.com

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

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

    Merci pour ces explications. Dans mon cas, le processeur possède 4 coeurs, donc si je me fis à votre explication, les temps de traitement devraient être similaire dès que l'on dépasse 4 parallèles.
    Oui si le traitement ne fait que du travail CPU. Si par contre il passe la moitié de son temps à faire des I/O alors le degré peut monter jusqu'à 8.

    Mais il y a une marge à prendre. D'une part parce qu'il y a d'autres choses qui tournent sur le serveur. D'autre part parce que dans le cas réel, où on a pas toujours une répartition régulière du travail en CPU, on observe une dégradation bien avant d'arriver à 100% d'utilisation.

    Ce que je ne comprend pas c'est que pour oracle même si il y a 50 scripts qui tournent en parallèle, il exécute le même nombre de requête que si il n'y en a qu'un qui est lancé.
    S'il n'y en a qu'un qui est lancé, il exécute les 50 scripts l'un après l'autre. Donc utilisation CPU faible (25% au maximum). Très souvent, le mieux est de tester avec différents degrés pour connaître le degré optimal.

    Autre point d'incompréhension, pourquoi avec 91 parallèles au lieu de 30 ont ne gagne que 10 min.
    Lorsqu'on dépasse la capacité, il n'y a plus de gain puisque les process vont se retrouver en file d'attente. La gestion des files d'attente donner des durées plus longues.

    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. execution partielle d'un script PL/SQL
    Par dyvim dans le forum PL/SQL
    Réponses: 24
    Dernier message: 29/12/2005, 11h33
  2. Execution Script PL/SQL
    Par hair_peace dans le forum PL/SQL
    Réponses: 13
    Dernier message: 29/06/2005, 10h55
  3. Réponses: 24
    Dernier message: 31/05/2005, 15h07
  4. Ecriture de script en SQL
    Par gillou4 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/04/2005, 09h23
  5. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59

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