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 :

Questions Performance : retour d'expérience


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut Questions Performance : retour d'expérience
    Hello a Tous

    Avez vous des retours d'experience concernant les fonctions SQL comme le CONVERT ou le CAST, que si elles etaient dans le WHERE cela prenait pas l'index (Des DBA m'on dit ca)

    J'ai fait des tests de mon coté, j'ai pas ce genre d'erreur lol

    J'ai lu aussi dans le livre SQL 2014 (SQL Server 2014 : Développer et administrer pour la performance) que le CONVERT est 30 % plus gourmand que le CAST, mais sans exemple; peut on avoir un retour d'experience?

    Derniere question :

    Est il possible de voir la liste des dernieres fonctions SQL apparus sur SQL 2012 et 2014 (comme EOMONTH, FORMAT etc....)

    Merci a vous et bonne journée

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par olivtone Voir le message
    Avez vous des retours d'experience concernant les fonctions SQL comme le CONVERT ou le CAST, que si elles etaient dans le WHERE cela prenait pas l'index (Des DBA m'on dit ca)
    C'est parfois vrai. Si la fonction porte sur la colonne indexée, cela peut empêcher l'utilisation des index sur cette colonne.

    Citation Envoyé par olivtone Voir le message
    J'ai fait des tests de mon coté, j'ai pas ce genre d'erreur lol
    Quels tests avez vous fait ?
    SQL Server est quand même capable d'utiliser les index pour certaines opérations, comme par exemple un DATETIME casté en DATE.


    Citation Envoyé par olivtone Voir le message
    J'ai lu aussi dans le livre SQL 2014 (SQL Server 2014 : Développer et administrer pour la performance) que le CONVERT est 30 % plus gourmand que le CAST, mais sans exemple; peut on avoir un retour d'experience?
    Je suis étonné de cette affirmation. En effet, un CAST est implicitement transcris en un CONVERT lors de l'élaboration du plan d’exécution.
    A mon sens, CAST n'est présent que pour le respect de la norme SQL.
    Mais les auteurs du livres sont présents sur le forum, peut-être pourront-ils apporter des précisions.

  3. #3
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    Merci de ton retour

    Concernant le cout du CAST et du convert je l'ai lu dans le livre j'essaierai de retrouver la page de mon coté
    Concernant le Test du Convert, j'ai pris une valeur toute bete dans la BDD Adventure Works 2012 et fait un CONVERT et un CAST sur la colonne indexée et celui prenait toujours l'index clustered.
    Si je comprends bien c'est au cas par cas concernant la fonction TSQL sur la clause WHERE non?

    Autre Question(j'en profite ) : Quelqu'un a t il un retour d'experience concernant l'activation du Lock pages in memory ?

    Merci a Vous super forum

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    C'est fort possible que tu vois un Clustered Index Scan et cela ne veut pas dire que tu CAST utilise un index
    Bien comprendre les SARG comme expliqué ici
    http://blog.developpez.com/zinzineti...es_fonctions_q

  5. #5
    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
    Concernant le Test du Convert, j'ai pris une valeur toute bete dans la BDD Adventure Works 2012 et fait un CONVERT et un CAST sur la colonne indexée et celui prenait toujours l'index clustered.
    Si je comprends bien c'est au cas par cas concernant la fonction TSQL sur la clause WHERE non?
    Poste nous le plan d'exécution de ta requête. Comme le dit nachid, il est possible que ta requête utilise un opérateur de scan d'index qu'une recherche d'index.

    Autre Question(j'en profite ) : Quelqu'un a t il un retour d'experience concernant l'activation du Lock pages in memory ?
    Que veux-tu savoir sur l'activation de cette option système?

    ++

  6. #6
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    Pour le Lock pages, j'ai vu un slide sur ce lien, pour l'optimisation de SQL sur des environnements virtualisés

    http://fr.slideshare.net/DecideursIT/dat208

    Il parlait sur le slide 9 des lock page in memory mais apres maintes recherche je vais abandonner cette piste d'autant plus que le serveur ne souffre

    pas de pression memoire, et est en Windows 2012 server R2

    pour le CONVERT et la CAST il prend bien l'index clustered et ne le scanne pas

    mais cela est vraiment aleatoire en fonction des valeurs recherches

    En tout cas merci de votre aide vraiment sympa

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par olivtone Voir le message
    pour le CONVERT et la CAST il prend bien l'index clustered et ne le scanne pas

    mais cela est vraiment aléatoire en fonction des valeurs recherches
    Non, ce n'est pas aléatoire, mais cela dépend de nombreux facteurs.
    Par exemple, modifier la liste des colonnes du SELECT peux influer sur l'utilisation ou non d'un index correspond à un filtre de la clause WHEREPouvez-vous poster la/les requêtes que vous avez exécutées ?

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Je suis étonné de cette affirmation. En effet, un CAST est implicitement transcris en un CONVERT lors de l'élaboration du plan d’exécution.
    A mon sens, CAST n'est présent que pour le respect de la norme SQL.
    Mais les auteurs du livres sont présents sur le forum, peut-être pourront-ils apporter des précisions.
    Et oui, aussi surprenant que cela puisse paraître, le CAST est plus rapide simplement par ce qu'il n'a pas à prendre en compte le 3e paramètre potentiel du CONVERT !

    Tu peut t'amuser à reproduire le test que nous avons fait avec une table de 1253500 lignes....

    A +
    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/ * * * * *

  9. #9
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    j'ai fait le test sur 3000000 de lignes le resultat n'est pas flagrant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 3000000 *
      FROM BDD.[dbo].[toto]
      WHERE PartyObjectTypeCode = CAST ('8' AS CHAR(10))
     SQL Server \endash Temps d'exécution*: 
    , Temps UC = 11547*ms, temps écoulé = 56346*ms.
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT TOP 3000000 *
      FROM BDD.[dbo].[toto]
      WHERE PartyObjectTypeCode = Convert (CHAR(10), '8')
    Temps UC = 10500*ms, temps écoulé = 59107*ms.
    Il y a un peu plus de Gain Temps niveau CAST mais pas énorme

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Avec ces requêtes, c'est tout à fait normal : le CAST ou le CONVERT ne sont éxécutés qu'une seule fois pour toutes la requête, puisque vous transtypez un littéral.

    Il faut appliquer la fonction sur une colonne.

  11. #11
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    desole pas compris tu as un exemple stp?

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(getdate() AS date) as 'date'
    Dans ton cast tu convertis ta date en date ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CONVERT(date,getdate(),103) as 'date'
    Avec le convert tu convertis ta date en date mais en utilisant un format de date spécifique 103 . Ce format est un paramètre supplémentaire de convertion ce qui prend du temps a SQL Server car il doit aller verifier le format de sortie nécessaire.

    Est ce plus claire ?
    MCSA SQL SERVER |MCT | MVP Data Platform

  13. #13
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    Merci Julien de ton retour mais ca je l'avais compris

    Je voulais voir un exemple concret de la difference Perf entre un CAST et un CONVERT car j'ai beau retourner dans tous les sens les requetes je ne

    trouve pas

  14. #14
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Et oui, aussi surprenant que cela puisse paraître, le CAST est plus rapide simplement par ce qu'il n'a pas à prendre en compte le 3e paramètre potentiel du CONVERT !
    Comme je le disais, le CAST est implicitement transformé en CONVERT avant l'éxécution de la requête... à moins que ce comportement n'ait été modifié dans la version 2014 de SQL Server ?


    Nom : cast_convert.JPG
Affichages : 245
Taille : 33,4 Ko

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Pétard les mecs, vous êtes vraiment pas bon....

    1) les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET NOCOUNT ON;
    GO
     
    CREATE TABLE T (D DATETIME)
    GO
     
    INSERT INTO T SELECT 1 + ABS(CHECKSUM(NEWID())) % 2958463
    GO 100000
    2) le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET STATISTICS TIME ON
    GO
     
    SELECT CAST(D AS DATE) FROM   T
    --> SQL Server Temps d'exécution*: Temps UC = 47*ms, temps écoulé = 561*ms.
     
    SELECT CONVERT(DATE, D, 0) FROM   T
    --> SQL Server Temps d'exécution*: Temps UC = 62*ms, temps écoulé = 873*ms.
    Vos conclusions ?

    A +
    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/ * * * * *

  16. #16
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Citation Envoyé par SQLpro Voir le message

    Vos conclusions ?
    LE CAST c'est un CONVERT avec un appel en moins j'ai tout compris sissi ?!!!!

    Evidement, dans ton cas il est bien plus rapide et moins gourmand en CPU mais te connaissant les chiffres doivent encore etre truqués

    Merci pour l'exemple
    MCSA SQL SERVER |MCT | MVP Data Platform

  17. #17
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    ok je l'avais pas vu effectivement merci !!

    j'attends le retour de SQLPRO pour voir les tests qu'il a fait de son coté sur les 1 million de ligne et voir vraiment la difference

    merci a Tous !!!

  18. #18
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Pétard les mecs, vous êtes vraiment pas bon....

    1) les données :

    2) le test :

    Vos conclusions ?
    Mes conclusions ?
    1 - 62ms ??? il faut que tu changes de machine
    2 - j'ai fait le test, et (hormis que ça prend deux fois moins de temps) je ne note pas de différence notable entre les deux, même en augmentant le nombre de lignes. Par ailleurs, j'observe toujours ceci dans le plan d’exécution, que ce soit pour la requête avec le CAST ou celle avec le CONVERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <ScalarOperator ScalarString="CONVERT(date,[test].[dbo].[T].[D],0)">

  19. #19
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Quand vous faites un test :
    1) exécutez le test 5 fois de suite
    2) ne tenez jamais compte de la première exécution (la mise en cache fausse les temps)
    3) en dessous d'un certain temps (250 ms) les mesures sont erratiques. Il faut donc pratiquer sur un plus grand volume

    Après cela dépend de la version.... Au fur et à mesure, les optimisations sont plus pointues !

    A +
    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/ * * * * *

  20. #20
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Quand vous faites un test :
    1) exécutez le test 5 fois de suite
    2) ne tenez jamais compte de la première exécution (la mise en cache fausse les temps)
    3) en dessous d'un certain temps (250 ms) les mesures sont erratiques. Il faut donc pratiquer sur un plus grand volume
    C'est bien ce que j'ai fait !

    Citation Envoyé par SQLpro Voir le message
    Après cela dépend de la version.... Au fur et à mesure, les optimisations sont plus pointues !
    Alors ça doit être ça.

    Que dit le plan d’exécution sous 2014 pour un CAST ? est-ce qu'on observe la même chose que ce que j'indique sous 2008R2 et 2012 ?

Discussions similaires

  1. Performance SQL, retour d'expérience
    Par olivtone dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/03/2015, 10h05
  2. Question d'hébergeur pour avoir des retours d'expérience
    Par zooffy dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 25/11/2010, 09h10
  3. Réponses: 4
    Dernier message: 11/12/2009, 12h33
  4. [PerformancePoint] Retour d'expérience sur Performance Point
    Par ygrim dans le forum Microsoft BI
    Réponses: 3
    Dernier message: 05/06/2008, 00h14
  5. Retour d'expérience ?
    Par jIdJo dans le forum Maven
    Réponses: 1
    Dernier message: 05/11/2003, 08h33

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