J'ai un serveur avec 16 CPU qui est configuré avec un max degree of parallelism
de 8 et un max worker threads
réglage de zéro.
Pendant une heure donnée, mes attentes de signal étaient de 20%, mais mon utilisation du processeur du système d'exploitation pendant cette période n'a jamais dépassé 25%. Quelqu'un peut-il expliquer pourquoi mes attentes de signal étaient si élevées?
Mon fournisseur a un système de notation de premier ordre qui s'attend à ce que nous attendions 10% ou moins de signal, ou nous nous faisons taper. Comment puis-je résoudre ce problème (sans ajouter de processeurs supplémentaires)?
- Nous n'avons pas plus de 8 processeurs par nœud NUMA, donc l' indicateur de trace 8048 ne s'applique pas.
- Les attentes d'instance les plus importantes sont
CXPACKET
(70%), puisPREEMPTIVE_OS_PIPEOPS
(20%) cost threshold for parallelism
est réglé sur 50. Dois-je le relever? À quoi?- Il s'agit d'une machine physique (pas une VM), dédiée à SQL Server.
- J'utilise un outil de surveillance pour identifier les requêtes et procédures les plus fréquemment exécutées. Est-ce que je veux regarder un CPU élevé, des E / S élevées ou une durée élevée? Normalement, notre application est intensive en E / S, donc je règle les E / S élevées. Mais puisque le problème est que le signal attend, dois-je regarder un CPU élevé?
- J'espérais éviter la recommandation de Max Vernon de
MAXDOP
passer à 4, car l'application effectue des requêtes de style entrepôt qui nécessitent des threads supplémentaires.
sql-server
performance
Chris Woods
la source
la source
Réponses:
Réponse Wiki communautaire générée à partir des commentaires sur la question par Aaron .
Sauf si vous rencontrez des problèmes de performances, le pourcentage élevé d'
CXPACKET
attentes peut uniquement être un indicateur qu'une grande partie des requêtes se déroule en parallèle et n'est pas réellement un problème.Un processeur élevé pourrait être un indicateur, mais d'après ce que vous avez expliqué, je dirais que regardez les requêtes avec de longues durées mais un processeur faible pour commencer. L'
CXPACKET
attente est parfois associée à une requête attendant que tous les threads se terminent avant de pouvoir fusionner les résultats (biais de données).Si vous êtes en mesure de modifier les requêtes et les procédures, vous pouvez définir une valeur plus élevée
MAXDOP
pour les tâches d'entrepôt qui en ont besoin et définir une valeur globaleMAXDOP
inférieure. Cependant, je ne ferais cela qu'en dernier recours. Vous ne voulez vraiment faire ces types d'indices explicites que lorsque vous avez épuisé toutes les possibilités ou que vous ne pouvez pas apporter de modifications au code, aux requêtes ou aux schémas de base de données.la source