Faible utilisation du processeur mais temps d'attente des signaux élevés

8

J'ai un serveur avec 16 CPU qui est configuré avec un max degree of parallelismde 8 et un max worker threadsré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%), puis PREEMPTIVE_OS_PIPEOPS(20%)
  • cost threshold for parallelismest 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 deMAXDOP passer à 4, car l'application effectue des requêtes de style entrepôt qui nécessitent des threads supplémentaires.
Chris Woods
la source
Merci Aaron! Je vais rechercher des requêtes avec une durée élevée et un processeur faible.
Chris Woods

Réponses:

2

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' CXPACKETattentes 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' CXPACKETattente 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 MAXDOPpour les tâches d'entrepôt qui en ont besoin et définir une valeur globale MAXDOPinfé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.

Paul White
la source