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 :

Problèmes de performances sur un serveur avec 256 Go de Mémoire


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut Problèmes de performances sur un serveur avec 256 Go de Mémoire
    Bonjour,

    Pour un de mes clients, j'ai besoin de traiter quelques millions de lignes, du coup je me suis dis qu'il faut prendre une bonne machine et donc j'ai pris :
    • un serveur sur lequel j'ai mis Windows Server 2008 R2 Entreprise 64 bits
    • 256 Go de mémoire (oui, 256 Go de mémoire)



    je viens de terminer son installation. j'installe aussi SQL Server 2008 R2 Entreprise Edition 64 bits

    Et puis je teste un requête simple qui va me retourner 550 000 ligne :
    ce simple Select va donc mettre 41 s pour me ramener mes 550 000 lignes

    Du coup, est ce que c'est normal qu'avec ces performances physiques, il met autant de temps pour faire un select ?

    Merci pour vos réponses.
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  2. #2
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Les colonnes d'un ordre select doivent êtres nommées explicitement éviter le SELECT *
    Précisez le nom des champs que vous souhaitez récupérer pour voir une requête plus optimisée
    si tu veut afficher tout il faut pointer sur vos index (manque des colonnes indexer ,statistique colonne manquant..)

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    Les colonnes d'un ordre select doivent êtres nommées explicitement éviter le SELECT *
    Précisez le nom des champs que vous souhaitez récupérer pour voir une requête plus optimisée
    si tu veut afficher tout il faut pointer sur vos index (manque des colonnes indexer ,statistique colonne manquant..)
    Ca ne changera rien puisqu'il n'y a pas de where, c'est un tablescan qui sera de toutes façon exécuté, sans passer par des index
    Ce qui, dans ce cas d'utilisation, sera beaucoup plus rapide que d'utiliser un index

  4. #4
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    mais pourquoi opération tablescan
    normalement on aurai un tablescan s'il s'agit d'un table heaps (absence d'un index cluster)
    normalement on aura une opération de type scan index

  5. #5
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    donc si je comprend bien avoir 256 Go de mémoire ou 2 Go de mémoire pour un select * est pareil ?

    j'ai donné l'exemple du SELECT * pour que je puisse tester si j'utilise bien les ressources de mon serveur mais j'ai bien des index, des conditions where et pas de * dans mes requêtes.

    comment savoir si j'utilises le maximum de performances de mon serveur (mémoire, CPU, ...) ?

    Merci.
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    mais pourquoi opération tablescan
    normalement on aurai un tablescan s'il s'agit d'un table heaps (absence d'un index cluster)
    normalement on aura une opération de type scan index
    Non, sauf si l'index est couvrant, ce qui avec un select * ou un select en clair de toutes les colonnes n'est pas possible.
    Seul cas d'exception : une table domaine de valeur avec juste 2 ou 3 colonnes qui en ce cas peuvent être toutes dans l'index

  7. #7
    Invité
    Invité(e)
    Par défaut
    C'est quoi la taille de ta table ?
    Parce que si tu cherches à rapatrier 5 Go de données sur ton poste, c'est peut-être plutôt au niveau réseau que ça doit prendre du temps...
    Ta RAM n'y changera rien !

  8. #8
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    C'est quoi la taille de ta table ?
    Parce que si tu cherches à rapatrier 5 Go de données sur ton poste, c'est peut-être plutôt au niveau réseau que ça doit prendre du temps...
    Ta RAM n'y changera rien !
    name rows reserved data index_size unused
    ma_table 552499 916176 KB 687960 KB 209472 KB 18744 KB

    Pour l'instant je tape mes requêtes sur mon serveur avec le SQL management studio, donc je ne pense pas que le réseau intervienne ...
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  9. #9
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par m-mas Voir le message
    donc si je comprend bien avoir 256 Go de mémoire ou 2 Go de mémoire pour un select * est pareil ?

    j'ai donné l'exemple du SELECT * pour que je puisse tester si j'utilise bien les ressources de mon serveur mais j'ai bien des index, des conditions where et pas de * dans mes requêtes.

    comment savoir si j'utilises le maximum de performances de mon serveur (mémoire, CPU, ...) ?

    Merci.
    il faut mesurer en parallèle les deux compteurs page life expectancy et Buffer Cache Hit Ratio
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT        @@SERVERNAME AS [Server Name], object_name, instance_name, cntr_value AS [Page Life Expectancy]
    FROM            sys.dm_os_performance_counters WITH (NOLOCK)
    WHERE        (object_name LIKE N'%Buffer Node%') AND (counter_name = N'Page life expectancy') OPTION (RECOMPILE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT CAST( 
            ( 
              SELECT CAST (cntr_value AS BIGINT) 
              FROM sys.dm_os_performance_counters  
              WHERE counter_name = 'Buffer cache hit ratio' 
            )* 100.00 
            / 
            ( 
              SELECT CAST (cntr_value AS BIGINT) 
              FROM sys.dm_os_performance_counters  
              WHERE counter_name = 'Buffer cache hit ratio base' 
            ) AS NUMERIC(6,3) 
          )

  10. #10
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    bon je n'arrive pas à comprendre le résultat des requêtes

    Nom : res_requete.png
Affichages : 303
Taille : 7,2 Ko
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par m-mas Voir le message
    Pour l'instant je tape mes requêtes sur mon serveur avec le SQL management studio, donc je ne pense pas que le réseau intervienne ...
    700 Mo de données à transférer puis à afficher... Es-tu sérieusement sûr que le réseau n'intervienne pas ?

  12. #12
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par m-mas Voir le message
    bon je n'arrive pas à comprendre le résultat des requêtes

    Nom : res_requete.png
Affichages : 303
Taille : 7,2 Ko
    Le compteur "Page Life Expectancy" est censé donner la durée de vie moyenne d'une page de données dans le cache de donnée
    il permet de savoir s'il existe une pression mémoire sur le cache. On trouvera en général une valeur élevée (disons supérieure à 300 secondes)
    plus que c'est valeur est supérieur a 300 plus que vous éte loin du notion pression mémoire
    Attention Cette valeur est en réalité une estimation pour une quantité de mémoire de référence de l'ordre de 4Go
    par exemple dans ton cas un serveur de 256GO U DOIT avoir un valeur supeieur de 256 * 300 / 4 = 19200s

  13. #13
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    700 Mo de données à transférer puis à afficher... Es-tu sérieusement sûr que le réseau n'intervienne pas ?
    euh je me trompe peut être, mon serveur c'est (localhost)\instanceSQL ! donc le réseau il interviens où ?
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par m-mas Voir le message
    euh je me trompe peut être, mon serveur c'est (localhost)\instanceSQL ! donc le réseau il interviens où ?
    oups, j'avais pas tout compris.
    Je ferme ma gueule.

  15. #15
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    oups, j'avais pas tout compris.
    Je ferme ma gueule.
    hihihih mais tu as réussi à me faire douter !!! pourtant on n'est que lundi
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  16. #16
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Citation Envoyé par m-mas Voir le message
    ...
    Et puis je teste un requête simple qui va me retourner 550 000 ligne :
    ce simple Select va donc mettre 41 s pour me ramener mes 550 000 lignes
    S'agit-il du temps qu'il met avant d'afficher la première ligne, ou du temps nécessaire pour faire défiler toutes ces lignes sur l'écran d'un terminal... ou, pire, les charger dans la grille d'un GUI ?
    Dans le premier cas, le serveur est lent, en effet.
    Dans le second cas, c'est le goulot d'étranglement de l'affichage qui est en cause, pas le SGBD.
    La taille de ta mémoire va faire la différence sur la préparation d'une requête complexe, avec moult jointures, tris, regroupements et autres fonctions analytiques, pas sur le simple affichage en vrac (sans tri) du contenu d'une table.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  17. #17
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    je vous remercie, je commence à comprendre un peu !

    je vous donne quelques explications : Le select * pour moi c'était juste pour tester le serveur, mais je vois que cela ne peut pas m'éclaircir si mon serveur est rapide ou non ...

    j'ai une centaine de requêtes qui vont s'exécuter les unes après les autres dans un ordre bien précis pour mettre à jour un SI selon un modèle bien précis (exemple, concaténer un id et une chaîne dans une colonne par ce que je souhaite avoir l'information concaténée ....)

    donc, j'ai fait en sorte de stocker aussi dans une table l'ordre d'exécution de mes requêtes avec le temps d'exécution et puis j'affiche par ordre décroissant le temps d'exécution pour essayer d'optimiser les requêtes les plus lentes !

    je vais prendre un exemple, pour moi c'est une simple requête update, mais elle prend 28s sur mon giga serveur :
    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 CG_ECRM_ID AS ID,
    	Case
    		WHEN  CG_PCGT_RACINE_CG_THEORIQUE LIKE'[12345]%' AND  CG_ECRM_COMPTE_AUXILIAIRE IS NOT NULL THEN  ISNULL(CG_ECRM_COMPTE_GENERAL,'') +'_'+ CG_ECRM_COMPTE_AUXILIAIRE
    		Else  CG_ECRM_COMPTE_GENERAL 
    	END AS CONC_CG
    INTO #TEMP0
    FROM TABLE_550000 
    JOIN TABLE_PLDC 
    	 ON CG_PCGT_RACINE_CG_THEORIQUE = CG_ECRM_COMPTE_GENERAL_THEORIQUE
     
    DECLARE @MAX INT  
    DECLARE @MIN INT  
    DECLARE @LOT INT = 50000
    SELECT @MAX = ISNULL(MAX(ID),0),@MIN= ISNULL(MIN(ID),0) FROM #TEMP0 
     
    /* suppression de l'index */
    EXEC PROC_DROP_INDEX 'CG_ECRM_CONC_CG','TABLE_550000'
     
    WHILE @MIN <=@MAX   
    BEGIN 
    	UPDATE TABLE_550000  
    	SET CG_ECRM_CONC_CG = CONC_CG
    	FROM #TEMP0
    	WHERE CG_ECRM_ID = ID
    		  AND ID >=@MIN  
    		  AND ID<=@MIN + @LOT     
    	SET @MIN=@MIN + @LOT+1   
    END
     
    /* recréation de l'index */
    EXEC PROC_CREATE_INDEX 'CG_ECRM_CONC_CG','TABLE_550000'
     
    /* Suppression de la table temporaire */
    DROP TABLE #TEMP0
    ma table TABLE_550000 contiens donc 550000 lignes et la table #TEMP0 va contenir 552499 (pour être exact)

    Pour moi ce genre de requête avec un "ordinateur" 256 Go de RAM et 24 CPU doit être instantané ...

    Et donc, est ce que le problème est dans :
    • le paramétrage SQL
    • l'écriture de la requête (et encore j'ai choisi la plus simple)
    • l'utilisation d'un update par lot


    Merci pour vos réponses et votre aide !
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  18. #18
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    je suis passé de 28s à 12s en enlevant la table temporaire
    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
    DECLARE @MAX INT  
    DECLARE @MIN INT  
    DECLARE @LOT INT = 50000
    SELECT @MAX = ISNULL(MAX(CG_ECRM_ID),0),@MIN= ISNULL(MIN(CG_ECRM_ID),0) FROM TABLE_550000 
     
    WHILE @MIN <=@MAX   
    BEGIN 
     
    update TABLE_550000 
    SET CG_ECRM_CONC_CG = t.CG_ECRM_CONC_CG
    FROM (
    SELECT CG_ECRM_ID AS id,
    	Case
    		WHEN  CG_PCGT_RACINE_CG_THEORIQUE like'[12345]%' 
    			AND CG_ECRM_COMPTE_AUXILIAIRE IS NOT NULL THEN  ISNULL(CG_ECRM_COMPTE_GENERAL,'') +'_'+ CG_ECRM_COMPTE_AUXILIAIRE
    		Else  CG_ECRM_COMPTE_GENERAL 
    	END AS CG_ECRM_CONC_CG
    FROM TABLE_550000 
    JOIN TABLE_PLDC
    	 ON CG_PCGT_RACINE_CG_THEORIQUE = CG_ECRM_COMPTE_GENERAL_THEORIQUE) t
    where CG_ECRM_ID = t.id
    AND t.ID >=@MIN  
    		  AND t.ID<=@MIN + @LOT     
    	SET @MIN=@MIN + @LOT+1   
    END
    j'ai aussi trouvé que l'utilisation d'un update par Lot est toujours meilleure (sans lot cela dépasse 1 min de traitement et j'arrête l'exécution)

    c'est bizarre pour les tables temporaires, il est dis ici :
    Les tables temporaires sont à utiliser majoritairement lorsque l’on a une volumétrie importante
    ce qui est exactement mon cas (j'ai de la volumétrie)
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  19. #19
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par m-mas Voir le message
    j'ai aussi trouvé que l'utilisation d'un update par Lot est toujours meilleure (sans lot cela dépasse 1 min de traitement et j'arrête l'exécution)
    Ca c'est toujours vrai !

    Citation Envoyé par m-mas Voir le message

    c'est bizarre pour les tables temporaires, il est dis ici : Les tables temporaires sont à utiliser majoritairement lorsque l’on a une volumétrie importante
    ce qui est exactement mon cas (j'ai de la volumétrie)
    Ca non, ca dépend du contexte

  20. #20
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Si c'était la première fois que vous avez exécuté la requête, ce temps est normal, car il lui faut le temps de lire les données du disque afin de les mettre en cache puis de lire le cache et de l'envoyer au client.
    Le temps relevé est alors essentiellement lié à la vitesse du sous-système disque.
    Si les données était en cache, alors le temps essentiel est celui de l'affichage si vous êtes en local. Sinon en distant c'est le temps réseau.

    Vous pouvez simuler ce comportement en vidant le cache avec la commande :

    Et réexécuter la requête. Pour mieux voir la situation, utilisez les statistiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET STATISTICS IO ON; --> permettra de voir la consommation d'IO physique (lecture physiques et anticipées => disque)
    Pour voir si c'est le tampon d'affichage qui à pris du temps, réexécuter la requête avec l'option statistique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET STATISTICS TIME ON; --> temps UC et temps chrono (notez les)
    Puis faite la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM Ma_Table;
    et notez les temps. La différence vous montrera le coût du tampon d'affichage.

    A +

    PS : nous serons aux journées SQL Server Microsoft GUSS.

    Personnellement je fais une session consacrée à : "20 requêtes pour mesurer la qualité du modèle de votre base"
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2012, 15h05
  2. Réponses: 39
    Dernier message: 21/12/2011, 21h01
  3. [XL-2007] Problème de performance sur serveur RDS
    Par totojordi dans le forum Excel
    Réponses: 0
    Dernier message: 01/06/2011, 16h09
  4. Réponses: 2
    Dernier message: 09/02/2009, 17h05
  5. problème de performance sur requête avec Tsearch2
    Par Morpheas dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 05/02/2008, 13h25

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