CXPACKET

(La republication ou l’utilisation de ces informations dans un produit / site Web commercial est interdite sans autorisation. Toutes les autres utilisations sont autorisées. En cas de doute, veuillez demander.)

(Retour à la page principale…)

Description:

L’explication la plus simple de ce type d’attente est qu’il existe des plans parallèles en cours d’exécution. Beaucoup de choses ont été écrites sur ce type d’attente et sur ce qu’il faut faire à ce sujet, et malheureusement, il y a beaucoup de mauvais conseils. Lorsqu’un itérateur d’échange (par ex. Flux de repartition) ou des exécutions d’analyse parallèles, il y aura au moins une attente CXPACKET (pour le thread de contrôle), et éventuellement d’autres s’il y a une distribution biaisée du travail.

Ne vous contentez pas de réduire le serveur MAXDOP pour essayer de les réduire ou de les supprimer ! Veuillez lire les explications détaillées et les conseils dans les liens ci-dessous.

(Description de Books Online : « Se produit avec des plans de requête parallèles lors de la tentative de synchronisation de l’itérateur d’échange de processeur de requête. Si l’attente est excessive et ne peut pas être réduite en ajustant la requête (par exemple en ajoutant des index), envisagez d’ajuster le seuil de coût pour le parallélisme ou d’abaisser le degré de parallélisme. »)

Questions / commentaires sur ce type d’attente? Cliquez ici pour envoyer un e-mail à Paul, surtout si vous avez des informations à ajouter à ce sujet.

Ajouté dans la version SQL Server :

Pré-2005/2005

Supprimé dans la version SQL Server :

N/A

Événements étendus Valeur wait_type:

La valeur map_key dans sys.dm_xe_map_values est de 187 en 2008 et 2008 R2, et de 191 en 2012 et 2014 RTM. Après 2014 RTM, vous devez vérifier le DMV pour obtenir la dernière valeur car certaines valeurs map_key ont changé dans les versions ultérieures.

Autres informations:

La réaction réflexe aux attentes de CXPACKET consiste à essayer de les supprimer ou de les réduire. C’est incorrect car ils peuvent être une partie parfaitement normale de votre charge de travail. Vous devez rechercher où ils se produisent et déterminer si le parallélisme est valide ou non, et s’il est valide, fonctionne normalement ou s’il y a un parallélisme biaisé.

J’ai écrit deux articles détaillés sur la compréhension et le dépannage des attentes de CXPACKET sur sqlperformance.com:

  • Statistiques d’attente irréfléchies: CXPACKET
  • En savoir plus sur les attentes CXPACKET: Parallélisme biaisé

Notez que dans la base de données SP2 2016, RTM CU3 2017 et Azure SQL, l’attente CXPACKET a été divisée de sorte que les attentes de parallélisme bénignes et non exploitables apparaissent maintenant comme des attentes CXCONSUMER. Cela signifie qu’il devrait y avoir moins d’attentes CXPACKET, et celles qui restent sont plus susceptibles d’indiquer un problème de performance.

Occurrences connues dans SQL Server (le numéro de liste correspond à la liste des piles d’appels) :

Les piles ci-dessous sont toutes des exemples de threads parallèles provenant de divers opérateurs de plan de requête. Il y a beaucoup, beaucoup plus d’occurrences avec des piles similaires.

Piles d’appels abrégées (le numéro de liste correspond à la liste des occurrences connues):

  1. SOS_Task::PostWait+90
    EventInternal::Wait+2c6
    EventInternal::WaitAllowPrematureWakeup+c7
    CXPipe::Pull+156
    CXTransLocal::AllocateBuffers+64
    CQScanXProducerNew::AllocateBuffers+31
    CQScanXProducerNew::GetRowHelper+293
    CQScanXProducerNew::GetRow+15
    FnProducerOpen+57
    FnProducerThread+851
    SubprocEntrypoint+a59
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+a8
  2. SOS_Task::PostWait+90
    EventInternal::Wait+2c6
    EventInternal::WaitAllowPrematureWakeup+c7
    XchngWait+b5
    CXPort::Open+147
    CQScanXProducerNew::Open+da
    FnProducerOpen+44
    FnProducerThread+851
    SubprocEntrypoint+a59
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+a8
  3. SOS_Task::PostWait+90
    EventInternal::Wait+2c6
    EventInternal::WaitAllowPrematureWakeup+c7
    CXPacketList::RemoveHead+e9
    CXPipe::ReceivePacket+7a
    CXTransLocal::ReceiveBuffers+2d
    CQScanExchangeNew::GetRowFromProducer+5f
    CQScanExchangeNew::GetRowHelper+66
    CQScanSortNew::BuildSortTable+2a6
    CQScanSortNew::OpenHelper+c0
    CQScanNew::OpenHelper+41
    CQScanStreamAggregateNew::Open+30
    CQScanNLJoinNew::Open+24
    CQScanSortNew::BuildSortTable+3a
    CQScanSortNew::OpenHelper+c0
    CQScanNew::OpenHelper+41
    CQScanXProducerNew::Open+c8
    FnProducerOpen+44
    FnProducerThread+851
    SubprocEntrypoint+a59
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+a8
  4. SOS_Task::PostWait+90
    EventInternal::Wait+2c6
    EventInternal::WaitAllowPrematureWakeup+c7
    XchngWait+b5
    CXPort::Open+147
    CQScanExchangeNew::Open+104
    CQScanHash::ConsumeBuild+fd
    CQScanHash::Open+8e
    CQScanSortNew::BuildSortTable+3a
    CQScanSortNew::OpenHelper+c0
    CQScanNew::OpenHelper+41
    CQScanXProducerNew::Open+c8
    FnProducerOpen+44
    FnProducerThread+851
    SubprocEntrypoint+a59
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+a8

You might also like

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.