Velocità di clock della CPU rispetto al numero di core della CPU - GHz più elevato o più core per SQL Server?


30

Stiamo iniziando a fornire un set di server fisici per un cluster virtuale di nodi SQL Server 2016 all'interno di VMware. Utilizzeremo le licenze Enterprise Edition.

Abbiamo in programma di impostare 6 nodi, ma c'è un po 'di dibattito su quale sia il modo ideale per eseguire il provisioning dei server fisici per quanto riguarda la velocità di clock della CPU rispetto al numero di core della CPU.

So che questo dipende in gran parte dal volume delle transazioni e dal numero di database archiviati tra altri fattori specifici del software, ma è consigliata una regola empirica generale?

Ad esempio, un doppio server fisico a 8 core, 3,2 GHz (16 core) è più preferibile a un doppio server a 16 core, 2,6 GHz (32 core)?

Qualcuno ha trovato un libro bianco che approfondisce ulteriormente questo tipo di argomento?


Qual è la tua preoccupazione, le prestazioni in astratto o le licenze e la convenienza?
Evan Carroll,

Risposte:


40

La regola generale è mantenere il numero di core il più basso possibile e la velocità del processore il più alta possibile. La matematica delle licenze dimostra che il punto è ~ $ 7.500 USD per core per la Expensive Edition.

L'acquisto dell'hardware corretto può ripagarsi con costi di licenza ridotti. Vedere Selezione del processore per SQL Server di Glenn Berry. È un'ottima risorsa su come scegliere un processore per SQL Server.

Dopo aver preso in considerazione la struttura delle licenze per core di SQL Server, è logico andare sempre con la massima velocità del processore disponibile, indipendentemente dal tipo di carico di lavoro, sia OLTP che di analisi. Avere la massima velocità core possibile non sarà mai un problema. Aumenta il numero di core come richiesto, ma non farlo mai riducendo la velocità del core.

In altre parole, non pensare che i processori 16 x 2,2 Ghz siano gli stessi dei processori 8 x 4,5 Ghz. Il risparmio sui costi dell'utilizzo dei processori da 2,2 Ghz rispetto ai processori da 4,5 Ghz sarà probabilmente un massimo di circa $ 10.000 USD (per una tipica macchina a due processori basata su Xeon). Saltare da 8 core a 16 core con SQL Server Enterprise Edition costa probabilmente oltre $ 60.000 USD in costi di licenza. In altre parole, potresti risparmiare $ 10.000 in costi hardware, ma perderai altri $ 50.000 in licenze.

Se decidi di aver bisogno di molti muscoli di elaborazione parallela e decidi di aver bisogno di 32 core per l'attività in corso, andare con i core più veloci pagherà i dividendi in tempi di elaborazione ridotti. Nessuno ti biasimerà per questo.

Detto questo, se la scelta è una CPU o più di una CPU, andare sempre con più di una CPU . L'esecuzione di SQL Server (o qualsiasi DBMS) su una singola CPU può causare tutti i tipi di problemi poiché la capacità di operazioni simultanee è notevolmente limitata.


11

Hold on hold on hold on

Sebbene gli aspetti relativi alle prestazioni e alle licenze siano interessanti, non sono l'unico aspetto di un carico di lavoro da considerare.

Una cosa che può avere un impatto sulla scelta del processore sono i thread di lavoro.

Discussioni sui lavoratori?

Yeah amico! Sono le cose che verranno utilizzate da SQL Server per eseguire le query e eseguire tutte le operazioni in background necessarie per mantenere le cose in forma.

Quando esaurisci i thread di lavoro, premi THREADPOOL attende

ThreadPool?

ThreadPool. Questa è una delle attese più cattive che puoi avere sul tuo server, insieme a RESOURCE_SEMAPHORE e RESOURCE_SEMAPHORE_QUERY_COMPILE . Ma quelli sono attese di memoria, e questa è una domanda sulla CPU.

Quindi torniamo al perché questo è Wiggity Wack.

Ecco come SQL Server calcola i thread di lavoro :

NOCCIOLINE

Notate come raddoppiare il numero di core non raddoppi i thread Max Worker e ottenete lo stesso numero con 1 core come con 4 core? L'equazione è:512 + ((logical CPUs - 4) * 16)

È un peccato, perché quando i conteggi dei core salgono, la velocità di clock di solito si aggira intorno a una o due generazioni indietro.

NOCCIOLINE

Dando un'occhiata a qualsiasi linea recente di chip Intel mostrerà una tendenza simile.

Come faccio a sapere di quanti thread ho bisogno?

Questo dipenderà molto da:

  • Numero di utenti
  • Numero di query parallele
  • Numero di query seriali
  • Numero di database e sincronizzazione dei dati (Mirroring, AG, backup per Log Log)
  • Se si lasciano MAXDOP e CTFP alle impostazioni predefinite

Se oggi non ti stai esaurendo, probabilmente stai bene.

Ma come fai a sapere se lo sei?

Ci sono buone domande, e ci sono grandi domande, e lascia che ti dica qualcosa, questa è UNA GRANDE DOMANDA .

THREADPOOL può manifestarsi come problemi di connessione e potresti visualizzare messaggi nel registro degli errori in merito alla mancata generazione di un thread .

Puoi anche guardare le statistiche di attesa del tuo server usando uno strumento gratuito come sp_Blitz o sp_BlitzFirst (divulgazione completa, contribuisco a questo progetto).

EXEC sp_Blitz

NOCCIOLINE

EXEC sp_BlitzFirst @SinceStartup = 1

NOCCIOLINE

Non posso semplicemente aumentare il numero massimo di thread di lavoro?

L'aumento del MWT può comportare un aumento delle SOS_SCHEDULER_YIELDattese.

Non è la fine del mondo, ma pensaci come aggiungere un buncha urlando i bambini alla lezione di un insegnante.

All'improvviso, sarà più difficile per ogni bambino attirare l'attenzione.

Quando un processo esaurisce il suo quantum di 4 ms , potenzialmente ci saranno più thread davanti ad esso in attesa di entrare nella CPU.

Le prestazioni potrebbero essere più o meno le stesse.

Come posso usare meno thread di lavoro?

Tu crudele [sostantivo] di un [sostantivo], quelli sono lavoratori con famiglie da sostenere! Mutui! Sogni!

Ma va bene, devo rispettare la linea di fondo. Sei il capo.

Il punto più semplice da cui iniziare è cambiare le impostazioni come MAXDOP e Cost Threshold For Parallelism dai valori predefiniti.

Se hai domande su come impostarle, vai qui:

Successivamente, il tuo lavoro diventa molto più difficile. Devi capire cosa sta usando tutti quei thread. A volte puoi farlo guardando le tue statistiche di attesa.

Più specificamente, se hai attese elevate sul parallelismo ( CXPACKET) E attese elevate sui blocchi ( LCK_), allora potresti imbatterti in lunghe catene di blocco che coinvolgono query parallele.

Sai cosa puzza? Mentre tutte quelle query parallele sono in attesa di ottenere i loro blocchi, non restituiscono i thread allocati.

Puoi quasi sentire quella macchina virtuale a quattro core che il tuo amministratore ti ha assicurato che era più che sufficiente per qualsiasi carico di lavoro senza fiato, eh?

Sfortunatamente, il tipo di query e ottimizzazione dell'indice che devi fare per risolvere quel problema va oltre lo scopo della domanda.

Spero che sia di aiuto!


2

Risposta wiki della community :

Il lungo e il breve è: la maggior parte dei carichi di lavoro per SQL Server sono OLTP che beneficiano di velocità di clock più elevate perché si tratta di un'operazione seriale.

A meno che non si stia progettando specificamente per un sistema estremamente parallelo, le velocità di clock vinceranno sempre. Esistono casi limite ma questa è la risposta del 95% delle volte. Anche il fatto che finisca per costare di meno è una buona cosa.


-3

La risposta arriva a questo: dipende dal tuo caso d'uso.

  • Stai elaborando più richieste di piccole dimensioni contemporaneamente o alcune richieste di grandi dimensioni?
  • Il programma che esegui è addirittura ottimizzato per il multi-core?

Ad esempio, ho un computer quad core ma il compilatore ESP8266 utilizza solo il 25% della mia CPU perché è progettato solo per utilizzare un core. Se avessi 1 core veloce, sarebbe più ottimale.


6
Ciao e benvenuto su dba.stackexchange.com ! La tua risposta è vera per un caso molto generale, ma non si concentra nei casi SQL o di database richiesti dall'OP. Prova a migliorarlo approfondendo la questione! :)
xDaizu
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.