|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
Bonjour,
lors d' un traitement sql j'ai deux requêtes de contrôle qui vont marquer un champ d'une table à ok pour ou à CI, les lignes dont ce champ est à Ok vont être insérées dans une autre table puis historiser dans dans un table d'histo. ce contrôle est fait par deux requête update IDENTIQUE la première avec des jointures vers 6 tables environs 2 millions de lignes chacunes. la deuxième vers une seul table avec 500000 lignes Mon problème est le suivant le deuxième update prend 50% du temps du traitement en regardant le plan d'exécution de cette requête il y un trie qui prend 86% du temps de la requête voici la requête en question: Code :
pourquoi le premier update identique et plus "lourd" (6 jointure vers des tables plus importantes) ne prend que 2 % du temps du traitement |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Est ce que votre première requête contient des tables temporaires ?
Je vois que la deuxième en contient une ? On pourrait avoir les 2 requêtes et les plans d'exécutions ? ++ |
|
00
|
|
|
#3 | ||
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
Voici la première requête ainsi que les sqlplan en pj
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
Bonne question de mikedavem, si la première n'en contient pas cherchez de ce côté là en priorité...
Au passage ce que vous faites semble extrêmement coûteux et est le résultat d'une modélisation bancale ce qui entraîne des surcoûts comme l'extraction des chaines dans le case (substring etc.).
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
A nos message se sont croisés....
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
y a t il un moyen de savoir se qui cause le trie (comme sous oracle) ou de forcer un plan d'exécution?
|
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() |
Citation:
Il manque de toute evidence un index très important sur la table temporaire (comme il vous le dit dailleurs...). L'ajout d'un index peut très bien supprimer ce tri si SQL SERVER se retrouve avec une entrée triée comme il faut suite à l'utilisation de ce dernier. Essayez en créant cet index mais surtout posez vous la bonne question: pourquoi utilisez vous une table temporaire?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#8 | ||
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
merci,
Voici le code du traitement au complet: des index sont déjà présents sur la table temp qui contient les colonnes qui forment la clé fonctionnelle Code :
|
||
|
|
00
|
|
|
#9 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Les sqlplans que vous nous avez donné ne correspondent pas à vos requêtes j'ai l'impression.
Par exemplelLes tables DWH_REF_COUNTRY et DWH_REF_BUSELINE sont utilisées alors que dans la requête postée il y a un commentaire sur ces tables ... ??? Au vu du nombre de lignes traités n'avez vous pas intérêt à transformer votre table temporaire en table de travail normale ? ++ |
|
00
|
|
|
#10 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Je viens de passer les plans de requête au peigne fin et je n'ai pas non plus trouvé la requête dont vous parlez. En outre, vous avez un manque massif d'index sur votre base de données, et l'utilisation de table temporaires révèle un modèle de données mal fait. On passera sur la présentation du code ... @++
__________________
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
|
|
|
#11 |
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
D'accord pour les index
cette phase permet de charger un dwh on scan donc les tables du dwh pour vérifier les CI par exemple que la personne liée à l'enregistrement que l'on essaye d’insérer dans le DWH existe déjà dans le dwh la table temp permet de stocker la clé fonctionnelle de l'enregistrement ... |
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
pour les sqlplan il présente le traitement au complet (je pensai avoir isoler les deux requete
ou me conseillez vous de mettre des index ? et de quel type clustered O/N nuique o/n? |
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Étant donné que nous n'avons pas le plan de requête de la requête qui vous pose le plus gros problème, on ne peut pas vous aider.
Une petite mise au point sur les index. Un index cluster doit être sur une colonne ou un jeu de colonnes dont chaque tuple de valeurs est unique. Un index unique peut être cluster. Un index de clé primaire peut ne pas être cluster. @++
__________________
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 |
|
00
|
|
|
#14 |
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
Peut on forcer un plan d'exécution sous SQL serveur ?
|
|
|
00
|
|
|
#15 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Oui avec des HINT ou avec des guides de plan ... mais je pense que vous n'allez pas dans la bonne direction ... dans la plupart des cas forcer l'optimiseur est contre performant ... il faut avoir envisager toutes les solutions pour faire cela.
++ |
|
00
|
|
|
#16 |
|
Nouveau Membre du Club
![]() IED décisionnel Inscription : mai 2011 Messages : 33 ![]() |
encore moi
j'ai l'impression que sql server ne recréé pas son plan éxécution a chaque modification sur la table y t il une commande pour forcer ce calcul ? |
|
|
00
|
|
|
#17 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
De quel ordre est votre modification de table ? ALTER TABLE ???
Si tel est le cas une recompilation est automatiquement relancée par le moteur. ++ |
|
00
|
Copyright © 2000-2012 - www.developpez.com