|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2008 Messages : 63 ![]() |
Bonjour,
Mon serveur virtuel (Windows Server 2003) héberge un serveur de base de données SQL Server. Tous les matins, un job tourne pendant en moyenne 2h. J'ai voulu raccourcir ce temps en ajoutant un CPU (manipulation faite à distance par quelqu'un d'autre). Résultat, le job prend 3h maintenant à s'éxécuter. Je ne sais pas où chercher le problème, avez-vous une piste pour commencer? Merci par avance ! |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Que fais votre job exactement ? Est-ce un script TSQL ? Un lot SSIS ? etc ...
Combien de processeurs sont utilisés par SQL Server depuis l'ajout de votre VCPU ? Code :
|
||
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2008 Messages : 63 ![]() |
Bonjour mikedavem et merci de vous intéresser à mon souci !
Alors, il s'agit d'un lot SSIS qui fait de l'import de données d'une base d'un serveur vers la base de mon serveur. Voici le résultat obtenu avec votre requête: Code :
Que signifie le champ "hyperthread_ratio"? |
||
|
|
00
|
|
|
#4 | ||||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Cela signifie simplement que SQL Server voit 4 CPU ici. Si vous n'avez rien modifié de particulier il les utilisera tous (a moins d'avoir paramétré l'affinity mask mais je doute que c'est le cas pour vous).
Vérifiez éventuellement votre parallélisme : Eventuellement tester avec le parallèlisme désactivé Code :
Code :
|
||||
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 82 ![]() |
Bonjour,
si c'est un problème de parallélisation, vous devriez voir énormément de CXPACKET : Code :
Cdt, |
||
|
|
00
|
|
|
#6 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Pas forcément. Si le package SSIS est lancé une fois par jour et que d'autres types d'attentes se produisent plus souvent on ne le verra pas de cette façon. Ils peuvent être "noyer" dans la masse.
Il vaut mieux utiliser la vue sys.dm_os_waiting_tasks pour vérifier les tâches qui auraient un lien avec un éventuel type d'attente CX_PACKET. ++ |
|
00
|
|
|
#7 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2008 Messages : 63 ![]() |
Glouferu, voici le résultat de la requête que vous m'avez proposé:
Code :
je n'ai pas de type d'attente CX_PACKET (qu'est-ce que cela signifie par ailleurs?) Code :
Je me demandais qu'avec 4 coeurs physiques, n'est-il pas mieux de configurer cette valeur à 2 normalement? Le processeur (un Intel Xeon X7460) ne fait pas d'hyperthreading normalement). |
||||
|
|
00
|
|
|
#8 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Citation:
Si vous le mettez à un, vous forcez SQL Server à n'utiliser qu'un seul CPU, ce qui signifie que vous désactivez la parallélisme. Si vous le mettez à 2, vous limitez SQL Server, s'il décide de paralléliser une requête, à l'utilisation de 2 CPU maximum, ce qui vous en laisse deux de libre dans votre cas, mais qui peut aussi prendre plus de temps à s'exécuter. Au passage, l'utilisation de sp_configure pour changer de niveau de parallélisation affecte toute l'instance SQL Server, c'est à dire toutes les requêtes s'exécutant sur toutes les bases de données hébergées par cette instance. C'est donc un peu brutal (oui Mikedavem, tu es une brute Cela dit, je ne sais pas s'il est possible de gérer le degré de parallélisme dans un package SSIS. En revanche si le package SSIS exécute une procédure stockée, il suffit de faire suivre la requête par OPTION (MAXDOP 1), et de tester. Vous pouvez aussi regarder ce qui se passe sur le serveur lorsque le package est en cours d'exécution avec la requête suivante (seulement celle Mise à jour du 13/05/2011) : la colonne Program vous donnera le nom du job, et sur la même ligne que celle qui a le nom du job qui exécute le package SSIS, les colonnes wait_type et wait_time vous indiquent respectivement : - quel est le type d'attente - depuis combien de temps cette attente à lieu, en millisecondes Dites-nous ce que vous obtenez. Vous pouvez exécuter la requête du billet autant de fois que nécessaire, elle est assez rapide. Vous pouvez également extraire le plan d'exécution en passant en paramètre à la fonction sys.dm_exec_query_plan() la valeur de la colonne plan_handle pour la même ligne : une fois exécutée sys.dm_exec_query_plan(), cliquez sur le lien dans la dernière colonne @++
__________________
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
|
|
|
#9 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Citation:
Après on ne sait toujours pas ce que fait ce package dans la source. Import d'une table, une requête SQL, une procédure stockée ??? On peut essayer de voir aussi directement dans BIDS ce qui prend le plus de temps avec l'onglet Progress. ++ |
|
|
00
|
|
|
#10 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2008 Messages : 63 ![]() |
Mon job SSIS importe des données d'une base d'un serveur vers la base de mon serveur.
La première étape est l'import de données brute ; on fait un simple copié collé des tables. La deuxième étape est le remplissage de tables "complexes" ; on fait un SELECT sur plusieurs tables qu'on croise, donc pour la plupart, ce sont des gros calculs. C'est sur cette deuxième étape que c'est long. En effet, sur un import, j'ai le résultat suivant: Code :
Pour info, je pense remettre les propriétés sur le parallélisme par défaut, étant donné que ça a l'air d'être la meilleure solution et qu'il faut en fait regarder ailleurs... |
||
|
|
00
|
|
|
#11 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 724 ![]() |
Quelle valeur pour l'option max degree of parallelism dans le cas du test ?
++ |
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2008 Messages : 29 ![]() |
Salut,
Pour augmenter la vitesse de la machine virtuelle il faut que tu réduises les ressources de cette machine virtuelle Exemple si tu à 2 Go de RAM physique tu affecteras que 800 ou 600 Mo pour la machine virtuelle ou si tu à un Dual-Core tu affecteras qu'un seul CPU à la machine virtuelle Une fois j'ai installé Windows 8 sur une machine virtuelle sur mon PC i7 4 Go et elle a mis 15 min pour démarré donc j'ai réduit les ressources utilisées par cette machine virtuelle de 1 Go de RAM et qu'un seul CPU ça démarrer en 5 min. Cordialement. |
|
|
00
|
|
|
#13 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Citation:
Donc dans votre cas, vous avez fait une capture où la requête attend 74 secondes que le calcul parallélisé soit préparé. C'est-à-dire que SQL Server est en train de calculer comment répartir la collection de données à partir de plusieurs threads de façon à ce que le calcul s'exécute le plus rapidement possible. Et cela prend parfois du temps. Cela se produit typiquement quand les statistiques de la table ne sont pas à jour, et /ou quand il manque un index qui servirait bien la requête. D'autre part rien ne permet de prédire le temps d'exécution d'une requête. Vous dites qu'elle devrait prendre 10 minutes, mais sur quoi vous basez-vous ? Cependant on ne peut pas vous aider beaucoup plus car vous n'avez pas répondu aux questions que moi et Mikedavem vous avons posé : - Quel est la valeur de l'option max degree of parallelism ? - Après avoir exécuté la requête de mon billet plusieurs fois pendant l'exécution du package SSIS, est-ce que vous voyez de façon consistante l'attente CXPACKET ? - Il est dommage que vous n'ayiez pas capturé le plan d'exécution comme je vous l'ai indiqué, car cela nous aurait définitivement permis de comprendre ce qui se passe @++
__________________
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 |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 82 ![]() |
Bonjour,
Je vais peut-être dire des bêtises mais 33% des temps d'attentes proviennent des SQLTRACE_BUFFER_FLUSH -> du coup j'essaierais à tout hasard de chercher une trace, un audit de configurer sur le serveur. Si avec 3 cpu, le traitement dur 1 heure de plus ... je repasserais votre vm à 2 CPU. Elsuket et mikedavem sont de meilleurs conseils que moi. Mais parfois, on cherche compliqué alors que c'est tout simple. Après, effectivement je pense que nos experts ont besoins de plus d'info pour vous aider au mieux ![]() Cdt, |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2008 Messages : 63 ![]() |
L'option max degree of parallelism valait 4 au moment des tests. J'ai gardé cette valeur par la suite.
Je ne vois pas l'attente CXPACKET spécialement après avoir exécuté plusieurs fois la requête pendant l'exécution du job... Je n'arrive pas à mettre le plan d'exécution, étant donné qu'il est trop grand (385213 caractères), est-ce que je peux regarder à un endroit en particulier? Glouferu, je pense également à repasser à 2 CPU, ce qui est dommage, mais ça sera envisagé si je ne trouve pas de solution |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com