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 :

Délai d'attente expiré !


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut Délai d'attente expiré !
    Bonjour tout le monde.
    Ma vue marchait correctement jusqu'à hier. Quand je l'execute maintenant je reste plusieur minutes sans voir de résultat, juste le message suivant "Délai d'attente expiré !"
    Je veux savoir ce qui peut causer ce genre d'anomalie

    Voici la 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
     
    SELECT DISTINCT 
                          TOP 100 PERCENT dbo.T_Vehicule.NumVehicule, dbo.V_Veille.DatePrise AS Jour, dbo.V_Veille.HeurePrise, dbo.V_Veille.Kilometrage AS [km jour], 
                          V_Veille_1.DatePrise AS Veille, V_Veille_1.Kilometrage AS [km veille], dbo.V_Veille.Kilometrage - V_Veille_1.Kilometrage AS KMS, 
                          dbo.V_Veille.Quantite AS Consommation, dbo.V_Veille.idPompe, dbo.V_Veille.idVehicule, dbo.T_Parc.NomParc
    FROM         dbo.T_Vehicule INNER JOIN
                          dbo.T_Parc ON dbo.T_Vehicule.idParc = dbo.T_Parc.idParc INNER JOIN
                          dbo.V_Veille ON dbo.T_Vehicule.idVehicule = dbo.V_Veille.idVehicule INNER JOIN
                          dbo.V_Veille V_Veille_1 ON dbo.T_Vehicule.idVehicule = V_Veille_1.idVehicule
    WHERE     (dbo.T_Parc.NomParc = N'Réseau') AND (V_Veille_1.DatePrise =
                              (SELECT     MAX(DatePrise)
                                FROM          T_PriseCarburant
                                WHERE      DatePrise < V_Veille.DatePrise AND V_Veille.idvehicule = V_Veille_1.idvehicule AND idvehicule = V_Veille.idvehicule)) AND 
                          (V_Veille_1.DatePrise =
                              (SELECT     MAX(DatePrise)
                                FROM          T_PriseCarburant
                                WHERE      DatePrise < V_Veille.DatePrise AND V_Veille.idvehicule = V_Veille_1.idvehicule AND idvehicule = V_Veille.idvehicule))
    ORDER BY dbo.T_Vehicule.NumVehicule, dbo.V_Veille.DatePrise

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    c'est peut etre parce que tu as plus de données ou l'état du réseau est differents, tu devrais mettre ta requete dans une procedure stockée et la lancée via le query analyzer.

  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 862
    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 862
    Points : 53 015
    Points
    53 015
    Billets dans le blog
    6
    Par défaut
    Il est stupide de mettre un ordre dans une vue en forçant avec la clause TOP. Cela est par principe interdit dans le langage SQL.

    C'est aussi ce qu'il y a de plus couteux certainement dans votre requête...
    Et qui pourrait explisquer le timeout

    A +

  4. #4
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par SQLpro
    Il est stupide de ....
    Le mot est un peu fort mon cher
    Le TOP vient automatiquement même si je le supprime il réapparait

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 015
    Points
    53 015
    Billets dans le blog
    6
    Par défaut
    ???

    Ou faites vous vos vues ???

    Avec un assistant à la con ???

    Alors évitez et faîtes les dans l'analyseur de requête avec vos doigts sur le clavier !


    A +

  6. #6
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    J'élimine la restriction et il me reste ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DISTINCT 
                          dbo.T_Vehicule.NumVehicule, dbo.V_Veille.DatePrise AS Jour, dbo.V_Veille.HeurePrise, dbo.V_Veille.Kilometrage AS [km jour], 
                          V_Veille_1.DatePrise AS Veille, V_Veille_1.Kilometrage AS [km veille], dbo.V_Veille.Kilometrage - V_Veille_1.Kilometrage AS KMS, 
                          dbo.V_Veille.Quantite AS Consommation, dbo.V_Veille.idPompe, dbo.V_Veille.idVehicule, dbo.T_Parc.NomParc
    FROM         dbo.T_Vehicule INNER JOIN
                          dbo.T_Parc ON dbo.T_Vehicule.idParc = dbo.T_Parc.idParc INNER JOIN
                          dbo.V_Veille ON dbo.T_Vehicule.idVehicule = dbo.V_Veille.idVehicule INNER JOIN
                          dbo.V_Veille V_Veille_1 ON dbo.T_Vehicule.idVehicule = V_Veille_1.idVehicule
    Le problème demeure toujours
    Sur l'Analiseur de requête ça tourne infiniment sans renvoyer de résultats

  7. #7
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par SQLpro
    ???
    Ou faites vous vos vues ??
    Avec un assistant à la con ???
    Pourquoi tu es si dur ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    J'ai eu récemment un problème de délai d'attente expiré, et cela venait d'un index manquant. Tant que la volumétrie est faible ça marche, mais dès qu'elle a augmenté cela ne marche plus du tout.
    Vérifie donc que les champs qui servent de filtre ou qui servent dans les jointures sont bien indexés.
    Peut-être également qu'un index a été vérolé.
    Attention la création d'une foreign key n'entraine pas la création d'un index.
    NB : Pour lister les index d'une table sp_helpindex Matable.

    A+
    Soazig

  9. #9
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Merci de ton intervention.
    Dans ma requêtes j'ai deux vues et je voudrais savoir si on peut leur ajouter des indexes ou pas

  10. #10
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Un bon point de départ : tu es dans Query Analyzer, tu fais CTRL + K, tu lances le SELECT qui compose ta vue, tu attends, tu attends, tu attends, et ensuite, quand tu as reçu tes résultats, tu regardes ton plan d'exécution. Si tu vois une flèche très épaisse, tu laisses ta souris sur l'icône d'où elle vient, et là, tu va savoir où créer ton index.

    Tu peux aussi sélectionner ta requête, et lancer l'assistant d'index (ITW = Index Tuning Wizard), c'est dans les menus de Query Analyzer.

    Tu peux aussi faire un CTRL + L, qui te donne le plan d'exécution estimé.

  11. #11
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Merci rudib
    Ton appui m'a beaucoup apporté. J'essaye maintenant de créer l'index sur la vue avec le langage Transact-sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE INDEX idVeille
       ON V_veille (idVehicule)
    GO
    Et voici le message d'erreur que je reçois :
    Impossible de créer index dans la vue 'V_Veille' car elle n'est pas liée au schéma.

  12. #12
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Aïe...

    Le but va être plutôt de créer ta vue sur la table sous-jacente. Tu pourrais créer un index sur la vue, pour en faire une vue matérialisée, mais c'est un chemin un peu plus ambitieux (cherche vues indexées, ou indexed views dans l'aide en ligne), car tu devras respecter un certain nombres de règles.

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 015
    Points
    53 015
    Billets dans le blog
    6
    Par défaut
    On ne peut pas créer d'index directement sur des vues, sauf à utiliser le concept de vues indexées (version SQL Server Entreprise obligatoire).

    Il faut indexer les tables sous jacentes aux vues.

    A +

  14. #14
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Ai-je ici une vue indexée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE VIEW dbo.V_Veille(idVehicule,DatePrise,HeurePrise,Kilometrage,idPompe,Quantite)
    AS
    SELECT     a.idVehicule, a.DatePrise, a.HeurePrise, a.Kilometrage, a.idPompe, b.Quantite
    FROM         dbo.T_PriseCarburant a INNER JOIN
                              (SELECT     idVehicule, DatePrise, MAX(heureprise) AS HeureMax, SUM(Quantite) AS Quantite
                                FROM          T_PriseCarburant
                                GROUP BY idVehicule, DatePrise) b ON a.idVehicule = b.idVehicule AND a.DatePrise = b.DatePrise AND a.HeurePrise = b.HeureMax

  15. #15
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    non non... La requête que tu listes n'est pas indexée, parce qu'elle n'en remplit pas les critères (notamment elle n'est pas liée au schéma), et même si... Vraiment, laisse tomber l'idée de créer ton index sur la vue. Ta vue est simplement une requête comme une autre stockée sur ton serveur. Travaille avec cette requête et regarde quelles tables elle utilise. De ces tables, il y en a peut-être qui peuvent être indexées pour améliorer les performances. Peut-être tes index ne seront pas utiles, et donc pas utilisés, c'est pour cette raison que je te suggère :
    1. d'utiliser l'assistant de création d'index (je ne sais pas son nom en français, en anglais ITW comme ci-dessus)
    2. après création d'index, de relancer ton select et de voir si qqch a changé dans ton plan d'exécution. Si ce n'est pas le cas, supprime ton index, il prendra de la place inutile.

    C'est le début d'une grande aventure En voyant ta requête, as-tu des index sur IdVehicule et DatePrise ?

  16. #16
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Cette vue est une partie intégrante de la grande vue que j'ai citée en haut de la première page .
    Je reviens demain ! Ca chauffe fort dans ma tête

Discussions similaires

  1. Délais d'attente expiré (problème de POOL ?)
    Par le_binr dans le forum Développement
    Réponses: 10
    Dernier message: 19/11/2008, 16h21
  2. Délai d'attente expiré
    Par GodGives dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/11/2007, 10h19
  3. "Délai d'attente expiré" aléatoire
    Par denilson74 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/07/2005, 10h48
  4. Délai d'attente expiré
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/07/2005, 21h50
  5. Délai d'attente expiré
    Par amiral thrawn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 12h04

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