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 SQL Server Discussion :

Temps d'execution d'une requete


Sujet :

Administration SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut Temps d'execution d'une requete
    Bonjour,

    suite a un changement de serveur j'ai une de mes requêtes qui est devenu très longue a exèctuer 12minutes58 contre 1minute09 auparavant.

    Ancien serveur
    Windows serveur 2003 avec sql 2008 SP1
    Processeur Xeon 5410 2.33 Ghz 8 Go RAM

    Nouveau serveur
    Windows serveur 2008 R2 SP1 avec sql 2008 SP2
    Processeur Xeon 5504 2.00 Ghz 18 Go RAM

    Taille de la base : 1.5 Go

    j'ai comparé tout les option de "sp_configure" avec les options avancé et elle sont identique

    Je ne sais plus ou cherché si vous avez des pistes je suis preneur

    Merci de votre aide

    Thierry

  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Il faut nous dire comment le changement de serveur s'est effectué, via :
    --> une réplication ?
    --> un backup/restore ?
    --> wizard import/export ? dans ce cas les index sont-ils pris en compte ?

    vérifie si les index posés sur les tables (membres de ta requête dans l'ancien serveur) sont également présents dans le nouveau serveur
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    - Quelle configuration CPU sur vos 2 machines ? (Nb de sockets, nb de cores totales)
    - Est ce que l'option max degree of parallelism est configurée ? Si oui comment ?
    - Est ce qu'il n'y a pas de limitation au niveau du paramètre max server memory (MB) sur le nouveau serveur ?
    - Avez vous éventuellement remis les statistiques et les index à jour sur le nouveau serveur ?

    En prenant une requête de référence et si vous activez les options de statistiques SET STATISTICS IO et SET STATISTICS TIME qu'obtenez vous sur l'ancien et le nouveau serveur ?

    ++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonsoir,

    Merci pour ses premières éléments.

    Voici les répnses a vos questions

    Le changement a etait fait par une reinstall total de l'ensemble et un Backup/Restore des bases.

    Nb de sockets : 1 , nb de cores totales : 4 sur les deux serveurs

    max degree of parallelism 0 64 0 0

    max server memory (MB) 16 2147483647 2147483647 2147483647

    Test avec les option IO et TIME
    Nouveau SERVEUR
    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 0*ms, temps écoulé = 6*ms.

    (271965*ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 1, lectures logiques 24715, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 3619*ms, temps écoulé = 25976*ms.

    Ancien serveur
    (264775 ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 1, lectures logiques 27167, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    SQL Server \endash Temps d'exécution :
    , Temps UC = 3625 ms, temps écoulé = 20378 ms.

    Javais fait un reorg de l'index et une mise a jour des stats

    Merci

    Thierry

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    J'ai relancé ma requete sur les 2 serveurs avec les options TIME et IO voici ce que cela donne :

    Ancien SERVEUR

    (109 ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 58, lectures logiques 1784561, lectures physiques 159, lectures anticipées 24433, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_COLLABORATEUR'. Nombre d'analyses 6, lectures logiques 102, lectures physiques 1, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_DOCENTETE'. Nombre d'analyses 7936, lectures logiques 18420462, lectures physiques 122, lectures anticipées 2324, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_ARTICLE'. Nombre d'analyses 20, lectures logiques 2417652, lectures physiques 3013, lectures anticipées 1533, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 26031, lectures logiques 2420004, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    SQL Server \endash Temps d'exécution :
    , Temps UC = 161324 ms, temps écoulé = 50453 ms.


    Nouveau Serveur

    (109*ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 26088, lectures logiques 637777725, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_COLLABORATEUR'. Nombre d'analyses 6, lectures logiques 102, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_DOCENTETE'. Nombre d'analyses 7944, lectures logiques 18439086, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_ARTICLE'. Nombre d'analyses 20, lectures logiques 2417652, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 33982, lectures logiques 1425946, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 3017011*ms, temps écoulé = 766240*ms.

    On remarque que le nombre d'analyse passe de 58 a 26088 mais je voie pas du tout pourquoi !!!!!!

    Merci de votre aide

    Thierry

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Que vous donne un SET STATISTICS PROFILE ON sur vos 2 requêtes ?

    ++

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonsoir

    avec SET STATISTICS PROFILE ON

    Il m'ouvre une deuxieme fenetre avec le deroulement de ma requetes je ne les ai pas mis car tres long dites moi si il vous les faut (213 Lignes)
    Merci
    thierry

    Nouveau Serveur

    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 10826*ms, temps écoulé = 10827*ms.

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 0*ms, temps écoulé = 0*ms.

    (109*ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 26088, lectures logiques 637777725, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_COLLABORATEUR'. Nombre d'analyses 6, lectures logiques 102, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_DOCENTETE'. Nombre d'analyses 7937, lectures logiques 18422790, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_ARTICLE'. Nombre d'analyses 20, lectures logiques 2417652, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 33982, lectures logiques 1425946, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    (213*ligne(s) affectée(s))

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 3014467*ms, temps écoulé = 765771*ms.


    Ancien Serveur

    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 10360*ms, temps écoulé = 10360*ms.

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 0*ms, temps écoulé = 0*ms.

    (109*ligne(s) affectée(s))
    Table 'F_DOCLIGNE'. Nombre d'analyses 58, lectures logiques 1784561, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_COLLABORATEUR'. Nombre d'analyses 6, lectures logiques 102, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_DOCENTETE'. Nombre d'analyses 7946, lectures logiques 18443742, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'F_ARTICLE'. Nombre d'analyses 20, lectures logiques 2417652, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 26031, lectures logiques 2420004, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

    (212*ligne(s) affectée(s))

    SQL Server \endash Temps d'exécution*:
    , Temps UC = 163622*ms, temps écoulé = 48724*ms.

  8. #8
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    le nouveau serveur est une machine virtuelle ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  9. #9
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Vous pouvez poster directement les plans d'exécutions utilisés par la requête sur les 2 serveurs.

    Est-ce qu'une autre requête vous donne les mêmes différences ?`

    ++

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonsoir,

    non le nouveau n'est pas une machine virtuel, et oui c'est la seul requete qui me pose problème.

    Par contre les plans d'execution des deux requètes sont trop volumineux pour etre poster ici (max 60 000 characteres et il font plus de 100 000)

    je les ai regardés vite fait (323 lignes....) il y a peu d'écart entre les 2(mais je comprend pas tout !!!)

    Merci encore pour votre aide et votre temps

    Thierry

  11. #11
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Par contre les plans d'execution des deux requètes sont trop volumineux pour etre poster ici (max 60 000 characteres et il font plus de 100 000)
    Désactiver l'option SET STATISTICS PROFILE et activer l'option "afficher le plan d'exécution réel" dans SSMS.

    Envoyez nous ensuite vos les plans d'exécutions au format "graphique" (clic droit enregistrer sous au format .sqlplan). Ce qui nous intéresse ici c'est de voir la partie qui concerne votre table 'F_DOCLIGNE' sur vos 2 serveurs.

    Au pire dites nous quels sont les opérateurs utilisés dans les 2 cas.

    ++

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    j'ai fait ce que vous m'aviez demander, mais les fichiers .sqlplan font 1 Mo chacun (je peu les mettre sur un FTP si besoin)

    Et des opérations il y en a beaucoup...

    Se que je note sur le nouveau serveur c'est l'apparition d'opération
    - FILTRE
    - INDEX SPOOL
    - CLUSTERED INDEX SCAN (Actual number of ROW : 272 000 environ)

    contre sur l'ancien
    - CLUSTERED INDEX SEEK (Actual number of ROW : 17 000 environ)

    Merci

    Thierry

    au cas ou je post ma requete
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    select do_piece, do_date, ct_num, dl_ligne, ar_ref, ar_refcompose, dl_design, dl_qte, dl_montantht/dl_qte as pu, 
    co_nom, dl_montantht, dl_montantht, 0, pa,cr, comintermediaire, margepcent, marge, ajustpa, pa_rectifie 
     
    from 
    f_docligne 
    left join f_collaborateur RepDoc on f_docligne.CO_No = Repdoc.co_no
     
    where 
    ar_ref = ar_refcompose
    and ar_refcompose is not null
    and ar_refcompose <>''
    and dl_qte<>0
    and do_piece in
    (
    select 
    f_docentete.do_piece
     
    from bor_view_docligne_ctrl, 
    f_docentete
    left join f_collaborateur RepDoc on f_docligne.CO_No = Repdoc.co_no
     
    where 
    bor_view_docligne_ctrl."do_piece" = f_docentete.do_piece 
    and bor_view_docligne_ctrl."do_type" = f_docentete.do_type 
    and bor_view_docligne_ctrl."do_domaine" = f_docentete.do_domaine 
    and (
    (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")>0.5
    or (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")<-0.5
    )
    and year(f_docentete.do_date)>2008
    and f_docentete.do_type<7
    )
     
    union all
     
    select do_piece, do_date, ct_num, dl_ligne, ar_ref, ar_refcompose, dl_design, dl_qte, dl_montantht/dl_qte as pu, 
    co_nom, 0, 0, dl_montantht, pa,cr, comintermediaire, margepcent, marge, ajustpa, pa_rectifie 
     
    from 
    f_docligne 
    left join f_collaborateur RepDoc on f_docligne.CO_No = Repdoc.co_no
     
    where 
    ar_ref <> ar_refcompose
    and ar_refcompose is not null
    and ar_refcompose <>''
    and dl_qte<>0
    and do_piece in
    (
    select 
    f_docentete.do_piece
     
    from bor_view_docligne_ctrl, 
    f_docentete
    left join f_collaborateur RepDoc on f_docentete.CO_No = Repdoc.co_no
     
    where 
    bor_view_docligne_ctrl."do_piece" = f_docentete.do_piece 
    and bor_view_docligne_ctrl."do_type" = f_docentete.do_type 
    and bor_view_docligne_ctrl."do_domaine" = f_docentete.do_domaine 
    and (
    (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")>0.5
    or (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")<-0.5
    )
    and year(f_docentete.do_date)>2008
    and f_docentete.do_type<7
    )
     
    union all
     
    select do_piece, do_date, ct_num, dl_ligne, ar_ref, ar_refcompose, dl_design, dl_qte, dl_montantht/dl_qte as pu, 
    co_nom, dl_montantht, 0, 0, pa,cr, comintermediaire, margepcent, marge, ajustpa, pa_rectifie 
     
    from 
    f_docligne 
    left join f_collaborateur RepDoc on f_docligne.CO_No = Repdoc.co_no
     
    where 
     
    (ar_refcompose is null
    or ar_refcompose ='')
     
    and dl_qte<>0
    and do_piece in
    (
    select 
    f_docentete.do_piece
     
    from bor_view_docligne_ctrl, 
    f_docentete
    left join f_collaborateur RepDoc on f_docentete.CO_No = Repdoc.co_no
     
    where 
    bor_view_docligne_ctrl."do_piece" = f_docentete.do_piece 
    and bor_view_docligne_ctrl."do_type" = f_docentete.do_type 
    and bor_view_docligne_ctrl."do_domaine" = f_docentete.do_domaine 
    and (
    (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")>0.5
    or (bor_view_docligne_ctrl."total_ht_from_composant" - bor_view_docligne_ctrl."total_ht")<-0.5
    )
    and year(f_docentete.do_date)>2008
    and f_docentete.do_type<7
    )
    ;;

  13. #13
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Peux-tu vérifier si les index crés sur les tables f_docligne et f_collaborateur RepDoc sont les mêmes sur les deux serveurs ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    oui tout est identiques a tel point que je viens backup/Restore la base du nouveau serveur sur l'ancien pour refaire des test et c'est pareille voir encore plus rapide sur l'ancien

    Heuresement qu'on est en période de fête sinon j'aurais tout bazardé déjà

    Merci encore de votre aide

    Thierry

  15. #15
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Pouvez-vous tout de même faire une mise à jour des statistiques de votre table f_docligne en FULL SCAN et de refaire un test par la suite ?

    ++

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    j'ai fait un
    UPDATE STATISTICS [dbo].[F_DOCLIGNE]
    WITH FULLSCAN
    GO

    et relancé les test, pas d'amélioration. (j'avais deja fait un FULLSCAN sur l'ensemble des tables et des vues)

    Merci

    Thierry

  17. #17
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Ok.

    Je n'ai pas regardé le contenu de votre requête visiblement l'optimiseur ne veut pas utiliser votre index. Les index SPOOL sont en général utilisés lorsque la table n'est pas indexée. (je suppose ici que vos index ne sont pas fragmentés ou très peu).

    Vous pouvez tenter de forçer l'utilisation de votre index pour voir si les performances s'améliorent pour votre requête (WITH INDEX ...)

    ++

  18. #18
    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
    Vous pouvez déjà enlever vos UNION ALL je pense.
    Est-ce que les résultats sont équivalents avec cette requête ?
    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
    SELECT do_piece
         , do_date
         , ct_num
         , dl_ligne
         , ar_ref
         , ar_refcompose
         , dl_design
         , dl_qte
         , dl_montantht / dl_qte AS pu
         , co_nom
         , case
             when (ar_ref = ar_refcompose AND ar_refcompose <> '')
               OR ar_refcompose IS NULL
               OR ar_refcompose = ''
             then dl_montantht
             else 0
           end
         , case when ar_ref  = ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , case when ar_ref <> ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , pa
         , cr
         , comintermediaire
         , margepcent
         , marge
         , ajustpa
         , pa_rectifie 
      FROM f_docligne 
           LEFT OUTER JOIN f_collaborateur RepDoc
             ON f_docligne.CO_No = Repdoc.co_no
     WHERE dl_qte <> 0
       AND do_piece IN (SELECT fde.do_piece
                          FROM bor_view_docligne_ctrl as bvd
                               INNER JOIN f_docentete as fde
                                 ON fde.do_piece   = bvd.do_piece 
                                AND fde.do_type    = bvd.do_type
                                AND fde.do_domaine = bvd.do_domaine
                               LEFT OUTER JOIN f_collaborateur as RepDoc
                                 ON Repdoc.co_no = f_docligne.CO_No
    -- je ne suis pas persuadé qu'il faille une jointure ici, f_collaborateur n'étant utilisé nulle part dans cette sous-requête
    -- d'ailleurs je ne suis même pas persuadé qu'il faille une sous-requête, une simple jointure pourrait suffire ?
                         WHERE bvd.total_ht_from_composant - bvd.total_ht NOT BETWEEN -0.5 AND 0.5
                           AND fde.do_date >= convert(datetime, '20090101', 112)
                           AND fde.do_type < 7)

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    je viens de tester votre requete et elle semble donné un résultat identique (faut que je verifie le tout)

    Une petite difference quand meme le temps d'execution !!!

    Ancien serveur : 1'09''
    Nouveau serveur : 12'58''
    New req new serveur : 18''

    Je ne suis pas le créateur de la requete mais elle semble comporté plus de sous requete et plus de calcul sont-il tous inutile ??

    En tous cas merci pour se pas de géant.

    Je verifie le tout et reviens vous donner les résultats.

    Thierry

  20. #20
    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
    Citation Envoyé par Avatar69 Voir le message
    Je ne suis pas le créateur de la requete mais elle semble comporté plus de sous requete et plus de calcul sont-il tous inutile ??
    La requête séparait les mêmes données en trois sous-ensembles distincts :
    1. ar_ref = ar_refcompose AND ar_refcompose <> ''
    2. ar_ref <> ar_refcompose AND ar_refcompose <> ''
    3. ar_refcompose is null OR ar_refcompose = ''

    Et seules trois colonnes du résultat variaient.

    J'ai regroupé les sous-ensembles en un ensemble complet (plus de filtre) et j'ai procédé à l'attribution des colonnes avec un CASE.

    Il se pourrait que la requête soit encore améliorable, mais là j'en suis moins sûr :
    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
    SELECT do_piece
         , do_date
         , ct_num
         , dl_ligne
         , ar_ref
         , ar_refcompose
         , dl_design
         , dl_qte
         , dl_montantht / dl_qte AS pu
         , co_nom
         , case
             when (ar_ref = ar_refcompose AND ar_refcompose <> '')
               OR ar_refcompose IS NULL
               OR ar_refcompose = ''
             then dl_montantht
             else 0
           end
         , case when ar_ref  = ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , case when ar_ref <> ar_refcompose AND ar_refcompose <> '' then dl_montantht else 0 end
         , pa
         , cr
         , comintermediaire
         , margepcent
         , marge
         , ajustpa
         , pa_rectifie 
      FROM f_docligne 
           LEFT OUTER JOIN f_collaborateur RepDoc
             ON f_docligne.CO_No = Repdoc.co_no
           INNER JOIN f_docentete AS fde
             ON fde.do_piece = f_docligne.do_piece
           INNER JOIN bor_view_docligne_ctrl AS bvd
             ON bvd.do_piece   = fde.do_piece 
            AND bvd.do_type    = fde.do_type
            AND bvd.do_domaine = fde.do_domaine
     WHERE dl_qte <> 0
       AND bvd.total_ht_from_composant - bvd.total_ht NOT BETWEEN -0.5 AND 0.5
       AND fde.do_date >= convert(datetime, '20090101', 112)
       AND fde.do_type < 7

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Temps d'execution d'une requete via phpMyAdmin ou PHP
    Par gcvoiron dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/10/2009, 23h08
  2. Temps d'execution d'une requete
    Par toto2233 dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/07/2007, 08h55
  3. Réf : Mesurer le temps d 'execution d 'une requete
    Par akrabmehdi dans le forum SQL
    Réponses: 1
    Dernier message: 10/07/2007, 20h48
  4. temp d'execution d'une requete sql
    Par mitoubra dans le forum JDBC
    Réponses: 4
    Dernier message: 15/06/2007, 22h34
  5. [Stratégie] Mesurer le temps d'exécution d'une requête
    Par nice dans le forum Général Java
    Réponses: 5
    Dernier message: 29/01/2006, 17h53

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