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

Développement SQL Server Discussion :

[SQL 2K] Nombre de read aberrant lors de l'execution de procédures stockées


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 48
    Points
    48
    Par défaut [SQL 2K] Nombre de read aberrant lors de l'execution de procédures stockées
    Bonjour,

    Je travaille sur une instance SQL 2000 Entreprise Edition SP4. En lançant le profiler j'observe qu'une procédure stockée occasionne parfois un nombre de read de "25" et parfois un nombre de read de l'ordre "150000" soit un rapport 5000. Lorsque le nombre de read est de l'ordre de "150000", le CPU sur le profiler est supérieur à 0 comme si le plan d'exécution de la procédure était recalculé alors que n'oberserve aucun update de statistiques dans le profiler.

    Voici le code de 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
     
    ALTER PROCEDURE [dbo].[psNoDossierUtilise]
    	@NoDossier VARCHAR(20),
    	@Client VARCHAR(15),
    	@Utilise BIT OUTPUT
    AS
    	if exists(SELECT Client FROM CLIENTINTER WHERE 
    			NoInter in (SELECT NoInter FROM INTER WHERE NoDossier = @NoDossier)
    			AND Client = @Client)
    		set @DejaUtilise = 1
    	else
    		set @DejaUtilise = 0
    Cette procédure ne provoque évidemment que la lecture de quelques pages lorsque je l'exécute, je n'arrive pas à reproduire le cas problématique. Le plan d'exécution montre que SQL SERVER fait 2 seek d'index :
    - Le 1er sur un index non clustered de la table CLIENTINTER (index uniquement sur la colonne Client
    - Le 2éme sur un index non clustered de la table INTER (index uniquement sur la colonne NoDossier)

    Avez-vous déjà rencontré ce problème ?

    Merci d'avance pour vos réponses

  2. #2
    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
    mettez le préfixe de schéma (dbo à défaut) devant le nom de tout vos objets.
    mettez l'étoile à la place du nom de client dans le select.
    enfin il serait plus judicieux de faire une jointure

    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
    ALTER PROCEDURE [dbo].[psNoDossierUtilise]
    	@NoDossier VARCHAR(20),
    	@Client VARCHAR(15),
    	@Utilise BIT OUTPUT
    AS
    	SELECT @DejaUtilise = 
                   CASE 
                      WHEN EXISTS(SELECT *
                                  FROM   dbo.CLIENTINTER AS C
                                         INNER JOIN dbo.INTER AS I
                                               ON C.NoInter  = I.NoInter 
                                  WHERE  I.NoDossier = @NoDossier)
                         THEN 1
                         ELSE 0 
            END;
    GO
    En sus il faudra peut être ajouter un index, mais comme vous ne nous avez pas fournit le description complète de la table index et contraintes compris il est difficile de vous aider davantage !

    A +

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2009, 10h21
  2. Réponses: 0
    Dernier message: 13/01/2009, 10h59
  3. Réponses: 2
    Dernier message: 21/03/2008, 16h07
  4. Réponses: 2
    Dernier message: 18/01/2008, 11h59
  5. Réponses: 1
    Dernier message: 26/05/2005, 12h24

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