Basso utilizzo della CPU ma attese di segnale elevate


8

Ho un server con 16 CPU che è configurato con un max degree of parallelismdi 8 e max worker threadsun'impostazione di zero.

Per una determinata ora, il mio segnale era in attesa del 20%, ma il mio utilizzo della CPU del sistema operativo durante quel periodo non è mai andato oltre il 25%. Qualcuno può spiegare perché le mie attese di segnale erano così alte?

Il mio fornitore ha un sistema di punteggio migliore nella sua categoria che si aspetta che ci aspettiamo un segnale del 10% o meno o che ci venga oscurato. Come posso risolvere questo problema (senza aggiungere ulteriori CPU)?

  • Non abbiamo più di 8 CPU per nodo NUMA, quindi Trace Flag 8048 non si applica.
  • Le attese più grandi sono CXPACKET(70%), quindi PREEMPTIVE_OS_PIPEOPS(20%)
  • cost threshold for parallelismè impostato su 50. Devo aumentarlo? A cosa?
  • Questa è una macchina fisica (non una macchina virtuale), dedicata a SQL Server.
  • Sto usando uno strumento di monitoraggio per identificare le query e le procedure più frequenti. Voglio guardare CPU alta, I / O alto o durata elevata? Normalmente la nostra app è intensiva per l'I / O, quindi ottimizzo l'I / O elevato. Ma poiché il problema è l'attesa del segnale, devo guardare CPU alta?
  • Speravo di evitare la raccomandazione di Max Vernon di scendere MAXDOPa 4, perché l'app esegue alcune query in stile magazzino che richiedono i thread extra.

Grazie Aaron! Cercherò query con alta durata e CPU bassa.
Chris Woods,

Risposte:


2

Community Wiki risposta generata dai commenti sulla domanda di Aaron .

A meno che non si verifichino problemi di prestazioni, l'elevata percentuale di CXPACKETattese potrebbe essere solo un indicatore del fatto che gran parte delle query sta andando in parallelo e non è effettivamente un problema.

Una CPU alta potrebbe essere un indicatore, ma da quello che hai spiegato direi guardare alle query con una lunga durata ma con una CPU bassa per cominciare. L' CXPACKETattesa è talvolta associata a una query in attesa del completamento di tutti i thread prima che possa unire i risultati (inclinazione dei dati).

Se si è in grado di modificare le query e le procedure, è possibile impostare un valore più alto MAXDOPper le attività di magazzino che ne hanno bisogno e impostare il livello MAXDOPinferiore globale . Tuttavia, lo farei solo come ultima risorsa. Vuoi davvero fare questi tipi di suggerimenti espliciti quando hai esaurito tutte le possibilità o non puoi apportare modifiche al codice, alle query o agli schemi del database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.