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

MS SQL Server Discussion :

Un select qui tourne en boucle


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut Un select qui tourne en boucle
    Bonjour,

    Nous avons une requête "select" qui tourne sans donner de résultat. (Logiciel métier)

    Etat : Suspendu
    Temps d'attente : 2844375
    Type d'attente : CXPACKET
    UC : 5835
    E/S physique : 3342
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT MAX(m.period ) period , m.voucher_ref , m.sequence_ref , m.client FROM ##Hagresso_AGRTPS11252 h , acumatch m WHERE h.client = m.client AND h.voucher_no = m.voucher_ref AND h.sequence_no = m.sequence_ref AND m.period >= h.payperiod AND h.voucher_no != h.voucher_ref GROUP BY m.voucher_ref , m.sequence_ref , m.client
    Dois je m'inquiéter ? Pouvez vous me dire à quoi correspond CXPACKET

    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    - As-tu analysé la requête avec l’assistant de paramétrage du moteur de base de données et vérifié s’il ne manque pas des indexes ?
    - As-tu examiné le plan d’exécution estimé de la requête ? et vérifié s’il n’y a pas des problèmes manifestes sur le plan ?
    - Quelle est la valeur actuelle du degré de parallélisme définie au niveau de l’instance SQL server ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sp_Configure "max degree of parallelism"
    Note : La valeur 0 signifie que le serveur détermine le degré maximal de parallélisme à utiliser.

    - De combien de processeurs le serveur dispose t-il ? En effet, certaines personnes recommandent une valeur de "max degree of parallelism" égale au nombre de processeurs divisés par 2.

    Exemple pour 8 processeurs, maxdop = 4 (il faut, peut être, ajuster cette valeur en faisant des tests de performance grandeur nature, tenant compte de l’activité réelle du Serveur et la nature des applications).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    sp_configure 'max degree of parallelism', 4;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    Enfin, il est aussi possible de fixer le MAXDOP au niveau de la requête. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT MAX(m.period ) period , m.voucher_ref, m.sequence_ref, m.client 
    FROM ##Hagresso_AGRTPS11252 h,  acumatch m 
    WHERE h.client = m.client 
    AND h.voucher_no = m.voucher_ref 
    AND h.sequence_no = m.sequence_ref 
    AND m.period >= h.payperiod 
    AND h.voucher_no != h.voucher_ref 
    GROUP BY m.voucher_ref, m.sequence_ref, m.client 
    OPTION (MAXDOP 1) -- c.à.d. on n'utilise plus le parallélisme pour cette requête on particulier
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Merci de la réponse.

    je suis débutant dans SQL... Comme tu viens de me le faire remarquer, il manque des informations.

    - As-tu analysé la requête avec l’assistant de paramétrage du moteur de base de données et vérifié s’il ne manque pas des indexes ?
    Oui, j'ai du créer des index. Au passage, j'en ai appris pas mal.

    As-tu examiné le plan d’exécution estimé de la requête ? et vérifié s’il n’y a pas des problèmes manifestes sur le plan ?
    je ne sais pas comment faire et je ne trouve pas de doc ??

    sp_Configure "max degree of parallelism" Me retourne 0
    Le serveur possède 8 processeurs

    Il n'est pas possible de modifier la requete, c'est un logiciel d'un éditeur.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    - Pour la doc, il existe sur internet un foisonnement de tutoriaux etc .. à commencer par l’excellent présent site Developpez.com ! Ci-dessous quelques liens :
    http://rudi.developpez.com/sqlserver.../optimisation/
    http://blog.developpez.com/sqlpro/p9...avec-sql-serv/

    - Comme il s’agit d’un logiciel déditeur. Il faut aussi se retourner vers l’éditeur et lui demander de te donner des solutions pour corriger le problème, de t’indiquer, par exemple, les conditions et autres préconisations optimales pour le bon fonctionnement du logiciel.

    - Revenons au problème posé. Comme tu n’as aucun accès au code source du logiciel la marge de manœuvre devient alors réduite. Ci-dessous quelques pistes :

    1 – Jouer sur les indexes des tables. Examiner le plan d’exécution, et ajouter les indexes manquants.

    2 - Définir l’option maxdop au niveau des indexes. Pour cela, il suffit de droper les indexes impliqués dans la requêtes incriminée, puis les recréer avec l’option maxdop = 1
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DROP INDEX IX_MaTable _xxxx ON dbo.Matable; 
    GO 
    CREATE INDEX IX_MaTable_xxxx ON dbo.MaTable (Champ1, Champ2, ..)
    WITH (MAXDOP=1); 
    GO
    PS : Attention, pense à extraire et à sauvegarder les scripts des indexes avant de les droper et de les recréer à nouveau.

    3 – Modifier au niveau de l’instance SQL SERVER la valeur de l’option 'max degree of parallelism'
    J’ai déjà évoqué cette solution dans mon post précédent. Attention, cette option a une portée de niveau Instance et donc toute modification aura des impacts sur toutes les applications qui tournent sur cette instance SQL Server.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    sp_configure 'max degree of parallelism', 2;  -- ou 3 ou 4 (faire des tests..) 
    GO
    RECONFIGURE WITH OVERRIDE;
    GO

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il serait surtout bon de regarder la plan de requête pour voir ce qui cause la lenteur de la requête (CTRL+L sous SQL Server Management Studio) ...

    Notons au passage que le degré de parrallélisme peut être paramétré u niveau de la requête, ce qui me semble être plus sage que de la placer au niveau de l'instance.
    Considérez toujours que SQL Server sait mieux que vous ce qu'il a à faire, même s'il faut parfois le guider

    @++

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    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 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    CXPACKET est une attente de process CPU. Le temps est totalement anormalement élevé et je suis prêt à parier que vous êtes victime du bug de l'hyperthreading...
    http://blogs.msdn.com/b/slavao/archi...12/492119.aspx

    Seule solution :
    arrêter le serveur, dans le BIOS, désactiver l'hyperthreading.

    A +

Discussions similaires

  1. [Quartz] Cron Job qui tourne en boucle
    Par K-Kaï dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 07/02/2008, 11h19
  2. cron qui tourne en boucle
    Par crazykangourou dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 24/09/2007, 14h36
  3. Select qui fais une boucle infinie
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 28/03/2006, 17h29
  4. Réponses: 1
    Dernier message: 19/12/2005, 13h00
  5. Pb de rand() qui tourne en boucle
    Par MadChris dans le forum MFC
    Réponses: 3
    Dernier message: 26/06/2004, 16h24

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