|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
bonjour
j'ai une requete qui retourne 4200 lignes celle ci mettant 2'30" à s'exécuter j'ai regardé le plan d'exécution, et il en retourne que l'order by prend 85% du temps en effet si je retire l'order by la requête s'exécute en moins d'une seconde cette requête est devenue longue suite à l'ajout de cette colonne : Code :
avec la colonne sans l'order by OU sans la colonne et avec l'order by => moins d'une seconde pourquoi ce comportement ? où sql server se fait avoir ? comment améliorer le temps ? l'order by et bien à la fin du plan d'exécution, donc je vois pas quoi ca pourrait le perturber ... Code :
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Après l'ajout de la nouvelle colonne, avez-vous mis à jour les statistiques (UPDATE STATISTICS ....) ?
Si non, réessayer après la mise à jour des statistiques. SQL SERVER utilises les statistiques pour décider des algorithmes à utiliser pour générer le plan d'exécution. Donc si vous modifier le modèle de données (création de nouvelles colonnes, création d'index, .....) alors il faut mettre à jour les statistiques afin d'aider le moteur SQL SERVER à une prise de décision intelligente. |
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
je me suis mal exprimé, l'ajout de colonne n'est pas sur la structure, mais sur la requête, avant la requête n'affichait pas cette colonne calculée, j'ai rajouté ce coalesce dans le select et j'ai vu le délai
au début j'ai pensé que c'était cette expression qui plombait le résultat, puis j'ai recherché sur le plan d'exécution pour voir que ce n'est pas le cas mais la combinaison de ce calcul + order by
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 726 ![]() |
Possibilité d'avoir les 2 plans d'exécution de requêtes et les statistiques d'exécutions via SET STATISTICS TIME ON et SET STATISTICS IO ON ?
++ |
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
sql server 2005 sp3 standard x64
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 674 ![]() |
Bonjour,
Il semble que vous ayez un léger problème d'estimation de cardinalités dans les deux cas. La requête prend du temps à cause du spool : 500.000+ IOs sur une table de travail, ça veut souvent dire qu'il manque un index pour aider la requête. Quelle est la définition de la table DevisVersionCoeffChapitre, avec ses index ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
10
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
Code :
- IdLigneBud - IdDevisVersion, IdLigneBud, IdChapitre et j'ai refait un sp_updatestats 'RESAMPLE' pas longtemps avant de fournir les plans d'exécution ... il me semble logique de mon point de vue que faire un order by ca se fait à la fin et que ca prend un court laps de temps en ram, donc je ne vois pas pourquoi sql server patinerait à faire autre chose quand je lui demande un order by ^^
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
||
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 674 ![]() |
La requête longue parallélise, pas la courte ...
Si quand la longue s'exécute vous avez un wait_time long avec le wait_type CX_PACKET, c'est que c'est la parallélisation qui pose problème. Donc soit vos statistiques ne sont pas à jour (je ne sais plus pourquoi je n'utilise plus sp_updatestats maintenant ... j'utilise UPDATE STATISTICS), soit votre table est fragmentée SQL Server est donc soit perdu dans son calcul d'équilibrage de la charge de travail des threads, ou attend qu'un thread ait terminé parce qu'il a mal estimé ou que la table est fragmentée. Aussi, comme TotalBrut n'est pas indexée, et que vous faites un groupement dessus, cela n'aide pas. Donc SQL Server n'a pas d'autre choix que de faire cela dans une table temporaire dans TempDB, et c'est cela qui plombe vos performances. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
10
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Exécutez la avec une OPTION(MAXDOP 1) pour voir...
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
10
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
la table DevisVersionCoeffChapitres est fragmentée à 0.9%
msdn disait il me semble que sp_updatestats appelle update statistics le option maxdop a l'air bon, 10x de suite 2 secondes, on va faire avec merci bien à tous
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() Sébastien Développeur informatique Inscription : avril 2007 Messages : 9 207 ![]() |
re,
en cherchant des infos sur le maxdop j'ai trouvé des gens qui faisaient un force order je viens de tester, le force order sans le maxdop est encore mieux, je suis en dessous d'une seconde
__________________
si vous ne comprenez pas ce que je dis, demandez à google |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com