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 :

Dégradation drastique des performances avec WHERE ROWNUM


Sujet :

Oracle

  1. #21
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter session set "_optimizer_rownum_pred_based_fkr" = false;
    et puis dans la même session testez votre requête.
    Citation Envoyé par mnitu Voir le message
    Personellement je doute et je pense que le problème est dans la (requête de la) vue.
    Merci pour la commande car en changement ce paramètre je récupère la première en moins de 3 secondes. Le problème est donc confirmé.

    Citation Envoyé par mnitu Voir le message
    Je n’en doute pas de vos tests mais réfléchissez un peu à la différence entre faire la pagination sur le serveur et la faire dans le client : java ou autre.
    Je me suis peut-être mal exprimé mais 4 secondes contre 1 heure, il n'y a pas photo.
    Pour information, j'interviens sur l'optimisation de l'affichage du tableau. Précédemment, il fallait plus d'1 minute contre moins de 8 secondes désormais.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  2. #22
    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 Nemek Voir le message
    Merci pour la commande car en changement ce paramètre je récupère la première en moins de 3 secondes. Le problème est donc confirmé.

    ALTER session SET "_optimizer_rownum_pred_based_fkr" = false;
    Ceci confirme donc bien, comme je l'ai pressenti, que votre problème de lenteur vient du basculement du CBO en mode FIRST_ROWS à cause de l'utilisation de la clause WHERE ROWUNM <= 1

    Mais attention ne modifiez pas ce paramètre sans l'accord du support Oracle
    Bien Respectueusement
    www.hourim.wordpress.com

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

  3. #23
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    De toutes façons, je n'ai pas la main sur l'instance Oracle, vive le DoD !

    Je voulais surtout identifier le problème. Et voir si c'était pas moi qui avait fait une grosse merde. Pour information, j'ai changé deux choses dans la vue (avant sa fonctionnait "bien") :
    1. Utilisation de JOIN au lieu de clause WHERE
    2. Utilisation de sous-requête (vue anonyme) pour le calcul des count au lieu de "SELECT INLINE"
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #24
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Nemek Voir le message
    ...
    Je me suis peut-être mal exprimé mais 4 secondes contre 1 heure, il n'y a pas photo.
    ...
    Bien sûr mais, vous ne pouvez pas comparer le fonctionnement normal (4s) avec le fonctionnement bogué (1H). Donc ça reste seulement une solution de contournement temporaire.

    Mais, de toute façon pour afficher la dernière page de 100 enregistrements sur les 7000 enregistrements ramènes par la requête vous aller faire transiter par le réseau tous les 7000 enregistrements ! Comparez ça avec la pagination fait sur le serveur ou seulement 100 enregistrements transitent finalement le réseau.

  5. #25
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour ma curiosité pourriez-vous faire un test avec la définition de la vue en dessous dans laquelle j’ai changé une jointure externe en sous-requête scalaire et j’ai neutralisé pour l’instant la zone count_history.

    Est-ce que avec cette définition de la vue vous avez toujours le problème ?

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    SELECT
        "VERSION"."VERSION_ID",
        "CLIENT"."FAMILY" "CLIENT_FAMILY",
        "CLIENT"."CODE" "CLIENT_CODE",
        "CLIENT"."NAME" "CLIENT_NAME",
        "CLIENT"."TYPE" "CLIENT_TYPE",
        "PRODUIT"."NAME" "PRODUIT_NAME",
        "PRODUIT"."FAMILY" "PRODUIT_FAMILY",
        "PRODUIT"."DOMAIN" "PRODUIT_DOMAIN",
        "PRODUIT"."CUSTOM" "PRODUIT_CUSTOM",
        "PRODUIT"."TYPE" "PRODUIT_TYPE",
        "VERSION"."DATE" "VERSION_DATE",
        "VERSION"."NUMERO" "VERSION_NUMERO",
        "VERSION"."NEXT" "VERSION_NEXT",
        "PRODUIT"."NORM" "PRODUIT_NORM",
        "PRODUIT"."MODEL" "PRODUIT_MODEL",
        "PRODUIT"."KEY" "PRODUIT_KEY",
        Nvl((Select count(*) 
               From external_service COUNT_EXS 
              Where COUNT_EXS."version_ref" = "VERSION"."VERSION_ID"
             ),0) AS COUNT_EXS
        "LIEN_VERSION_CLIENT"."LINK_SD",
        "LIEN_VERSION_CLIENT"."IS_LAST",
        0 AS COUNT_HISTORY          
      FROM "PRODUIT"
           JOIN 
           "VERSION"
        ON ("VERSION"."PRODUIT_REF" = "PRODUIT"."PRODUIT_ID"
           AND "VERSION"."STATUS"   IN ('NEW', 'DIFFUSED'))
           JOIN 
           "LIEN_VERSION_CLIENT"
        ON "LIEN_VERSION_CLIENT"."VERSION_REF" = "VERSION"."VERSION_ID"
           JOIN 
           "CLIENT"
        ON ("CLIENT"."CLIENT_ID"      = "LIEN_VERSION_CLIENT"."CLIENT_REF"
           AND "CLIENT"."SOURCE" = 'APPLICATION')

  6. #26
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Bienvu ca marche du tonerre Moins de 3 secondes.

    Cependant en corrigeant également le COUNT_HISTORY, je monte à 9 secondes. Voici la vue en question :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    SELECT
        "VERSION"."VERSION_ID",
        "CLIENT"."FAMILY" "CLIENT_FAMILY",
        "CLIENT"."CODE" "CLIENT_CODE",
        "CLIENT"."NAME" "CLIENT_NAME",
        "CLIENT"."TYPE" "CLIENT_TYPE",
        "PRODUIT"."NAME" "PRODUIT_NAME",
        "PRODUIT"."FAMILY" "PRODUIT_FAMILY",
        "PRODUIT"."DOMAIN" "PRODUIT_DOMAIN",
        "PRODUIT"."CUSTOM" "PRODUIT_CUSTOM",
        "PRODUIT"."TYPE" "PRODUIT_TYPE",
        "VERSION"."DATE" "VERSION_DATE",
        "VERSION"."NUMERO" "VERSION_NUMERO",
        "VERSION"."NEXT" "VERSION_NEXT",
        "PRODUIT"."NORM" "PRODUIT_NORM",
        "PRODUIT"."MODEL" "PRODUIT_MODEL",
        "PRODUIT"."KEY" "PRODUIT_KEY",
        Nvl((SELECT count(*) 
               FROM external_service COUNT_EXS 
              WHERE COUNT_EXS."version_ref" = "VERSION"."VERSION_ID"
             ),0) AS COUNT_EXS,
        "LIEN_VERSION_CLIENT"."LINK_SD",
        "LIEN_VERSION_CLIENT"."IS_LAST",
        NVL(
          SELECT COUNT(*)
          FROM VERSION v JOIN LIEN_VERSION_CLIENT vc ON v.version_id=vc.version_ref
          WHERE v."PRODUIT_REF"="PRODUIT"."PRODUIT_ID" AND vc."CLIENT_REF"="CLIENT"."CLIENT_ID"
        ,0) AS COUNT_HISTORY
      FROM "PRODUIT"
      JOIN "VERSION"
      ON "VERSION"."PRODUIT_REF" = "PRODUIT"."PRODUIT_ID"
      AND "VERSION"."STATUS"   IN ('NEW', 'DIFFUSED')
      JOIN "LIEN_VERSION_CLIENT"
      ON "LIEN_VERSION_CLIENT"."VERSION_REF" = "VERSION"."VERSION_ID"
      JOIN "CLIENT"
      ON "CLIENT"."CLIENT_ID"      = "LIEN_VERSION_CLIENT"."CLIENT_REF"
      AND "CLIENT"."SOURCE" = 'APPLICATION'
      ;
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #27
    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
    Pour le count_history, essayez avec une fonction de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(*) over(partition by "PRODUIT"."PRODUIT_ID", "CLIENT"."CLIENT_ID") as count_history

  8. #28
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Le principe de l'histoire est de compter toutes les versions disponibles d'un même produit pour une version et un client donné.

    Ici ca va juste me compter les dernières versions d'un produit pour un client donné, soit 1.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #29
    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
    Ah oui à cause des statuts, je n'avais pas fait attention.

  10. #30
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour count_history c’est une autre histoire. Ce qui me gêne est de relire les tables version et lien_version_client qui sont dans la jointure. J’ai l’impression que vous devez faire les jointures sans la partie WHERE (*) en comptant ainsi les versions des clients comme suggère par Waldar et déplacer les filtres concernant le statut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND "VERSION"."STATUS"   IN ('NEW', 'DIFFUSED')
    dans une autre (l’autre) (sous-)requête.

    (*) Dans vos jointures séparez les conditions de jointures ON des filtres WHERE.
    Le résultat est identique dans le cas d’une jointure normale mais ce n’est plus la même mayonnaise avec les jointures externes. Et ça vous permet à mieux discerner les conditions de jointures des filtres.

    Exemple:
    Jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON "VERSION"."PRODUIT_REF" = "PRODUIT"."PRODUIT_ID"
    Where
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND "VERSION"."STATUS"   IN ('NEW', 'DIFFUSED')

  11. #31
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Mea Culpa, je suis plus sur le projet alors j'ai répondu un peu vite. La technique devrait fonctionner, le problème n'était pas les status, mais sur le last_rev mais celui-ci est fait "après".
    Merci d'ailleurs d'avoir mis en lumière ma coquille sur les status.

    Cependant ca prend toujours 10 secondes contre 4 secondes pour ma version :s Mais je peux paginer avec le rownum ...
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  12. #32
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si je ne me suis pas trompé votre vue pourrait être :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    SELECT
            t."VERSION_ID",
            "CLIENT"."FAMILY" "CLIENT_FAMILY",
            "CLIENT"."CODE" "CLIENT_CODE",
            "CLIENT"."NAME" "CLIENT_NAME",
            "CLIENT"."TYPE" "CLIENT_TYPE",
            "PRODUIT"."NAME" "PRODUIT_NAME",
            "PRODUIT"."FAMILY" "PRODUIT_FAMILY",
            "PRODUIT"."DOMAIN" "PRODUIT_DOMAIN",
            "PRODUIT"."CUSTOM" "PRODUIT_CUSTOM",
            "PRODUIT"."TYPE" "PRODUIT_TYPE",
            t."DATE" "VERSION_DATE",
            t."NUMERO" "VERSION_NUMERO",
            t."NEXT" "VERSION_NEXT",
            "PRODUIT"."NORM" "PRODUIT_NORM",
            "PRODUIT"."MODEL" "PRODUIT_MODEL",
            "PRODUIT"."KEY" "PRODUIT_KEY",
            Nvl((SELECT Count(*) 
                   FROM external_service COUNT_EXS 
                  WHERE COUNT_EXS."version_ref" = t."VERSION_ID"
                 ),0) AS COUNT_EXS
            t."LINK_SD",
            t."IS_LAST",
            t."LINK_SD",
            t."IS_LAST",
            t.COUNT_HISTORY
      FROM 
           "PRODUIT"
           JOIN 
           (SELECT
                   "VERSION"."PRODUIT_REF",
                   "VERSION"."VERSION_ID",
                   "VERSION"."DATE" ,
                   "VERSION"."NUMERO" ,
                   "VERSION"."NEXT" ,
                   "VERSION"."STATUS"
                   "LIEN_VERSION_CLIENT"."CLIENT_REF",
                   "LIEN_VERSION_CLIENT"."LINK_SD",
                   "LIEN_VERSION_CLIENT"."IS_LAST",
                   "LIEN_VERSION_CLIENT"."LINK_SD",
                   "LIEN_VERSION_CLIENT"."IS_LAST",
                   Count(*) Over (Partition By "VERSION"."PRODUIT_REF", "LIEN_VERSION_CLIENT"."CLIENT_REF") As COUNT_HISTORY
              From "VERSION"
                   JOIN 
                   "LIEN_VERSION_CLIENT"
                ON "LIEN_VERSION_CLIENT"."VERSION_REF" = "VERSION"."VERSION_ID"
           ) t
        ON t."PRODUIT_REF" = "PRODUIT"."PRODUIT_ID"   
           JOIN 
           "CLIENT"
        ON "CLIENT"."CLIENT_ID" = "LIEN_VERSION_CLIENT"."CLIENT_REF"
     WHERE t."STATUS" IN ('NEW', 'DIFFUSED')
       AND "CLIENT"."SOURCE" = 'APPLICATION'
    Si c’est le cas testez avez cette vue.

  13. #33
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pour être sûr que je me plante pas dans la traduction avec les vrais noms de table et de colonnes et de constantes, il n'y a que la jointure sur l'historique qui a été modifiée par rapport à la dernière version ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  14. #34
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    La modification concerne les tables version et lien_version_client. L’idée à été d’éliminer la double visite de ces tables. Pour cela leur jointure est fait séparément et ça a impliqué de préciser les colonnes utilisées par la requête ou nécessaires aux conditions de jointure et filtres. Comparez avec votre dernière requête.

  15. #35
    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
    Par contre la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON "CLIENT"."CLIENT_ID" = "LIEN_VERSION_CLIENT"."CLIENT_REF"
    serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON "CLIENT"."CLIENT_ID" = t."CLIENT_REF"

  16. #36
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    J'ai descendu le contrôle du STATUS car je dois compter uniquement les NEW/DIFFUSED. Et j'ai viré les doubles colonnes (deux dernières) sur la sous-vue.
    Par contre, ne faudrait-il pas descendre le COUNT_EXT dans la sous-requête ?


    Sinon j'obtiens les mêmes résultats, j'ai vérifié en faisant deux MINUS dans un sens, puis dans l'autre.


    Cependant je retombe sur le problème initial. La requête s'exécute pendant plusieurs minutes avec un filtre sur "ROWNUM <= 100". En modifiant le paramètre de session , elle prend 9 secondes.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  17. #37
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Nemek Voir le message
    J'ai descendu le contrôle du STATUS car je dois compter uniquement les NEW/DIFFUSED. Et j'ai viré les doubles colonnes (deux dernières) sur la sous-vue.
    Par contre, ne faudrait-il pas descendre le COUNT_EXT dans la sous-requête ?
    ...
    Alors il pourrait être calculé directement.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    SELECT
        "VERSION"."VERSION_ID",
        "CLIENT"."FAMILY" "CLIENT_FAMILY",
        "CLIENT"."CODE" "CLIENT_CODE",
        "CLIENT"."NAME" "CLIENT_NAME",
        "CLIENT"."TYPE" "CLIENT_TYPE",
        "PRODUIT"."NAME" "PRODUIT_NAME",
        "PRODUIT"."FAMILY" "PRODUIT_FAMILY",
        "PRODUIT"."DOMAIN" "PRODUIT_DOMAIN",
        "PRODUIT"."CUSTOM" "PRODUIT_CUSTOM",
        "PRODUIT"."TYPE" "PRODUIT_TYPE",
        "VERSION"."DATE" "VERSION_DATE",
        "VERSION"."NUMERO" "VERSION_NUMERO",
        "VERSION"."NEXT" "VERSION_NEXT",
        "PRODUIT"."NORM" "PRODUIT_NORM",
        "PRODUIT"."MODEL" "PRODUIT_MODEL",
        "PRODUIT"."KEY" "PRODUIT_KEY",
        Nvl((SELECT count(*) 
               FROM external_service COUNT_EXS 
              WHERE COUNT_EXS."version_ref" = "VERSION"."VERSION_ID"
             ),0) AS COUNT_EXS,
        "LIEN_VERSION_CLIENT"."LINK_SD",
        "LIEN_VERSION_CLIENT"."IS_LAST",
        Count(*) Over (Partition BY "VERSION"."PRODUIT_REF", "LIEN_VERSION_CLIENT"."CLIENT_REF") AS COUNT_HISTORY
      FROM "PRODUIT"
      JOIN "VERSION"
           ON "VERSION"."PRODUIT_REF" = "PRODUIT"."PRODUIT_ID"
      JOIN "LIEN_VERSION_CLIENT"
           ON "LIEN_VERSION_CLIENT"."VERSION_REF" = "VERSION"."VERSION_ID"
      JOIN "CLIENT"
           ON "CLIENT"."CLIENT_ID"      = "LIEN_VERSION_CLIENT"."CLIENT_REF"
    Where "VERSION"."STATUS"   IN ('NEW', 'DIFFUSED')
      AND "CLIENT"."SOURCE" = 'APPLICATION'

Discussions similaires

  1. Dégradation des performances avec la quantité de données chargées
    Par matdev62 dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 06/01/2011, 14h56
  2. Evaluer des performances avec la toolbox CyNC
    Par chouki dans le forum Simulink
    Réponses: 0
    Dernier message: 14/03/2009, 00h01
  3. Performances avec des listes d'objets
    Par metalcoyote dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2008, 11h11
  4. [MySQL] Dégradation des Performances
    Par Garra dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/03/2007, 09h36
  5. [InstantObjects][ECO] Dégradation des performances
    Par Pascal Jankowski dans le forum Delphi
    Réponses: 1
    Dernier message: 26/02/2007, 11h51

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