SQL Server single core su VM


7

Recentemente il nostro distretto scolastico ha aggiornato diversi server dalla versione 2005 al 2016 e da server fisici a server VM.

Il nostro team dell'infrastruttura ha presentato i server VM per l'installazione di SQL Server con un singolo core.

Sto tentando di spiegare al capo di quel dipartimento che SQL Server "odia" essere su un singolo core e che vuole vedere "prove". Nessuno dei dati che ho presentato ha soddisfatto il suo bisogno di prove e quindi ha chiesto alcuni articoli sul perché un SQL Server VM non funzionerà in modo efficiente su un singolo core.

Quali articoli usi per questo?

Qualsiasi aiuto per me nel presentare il mio caso sarebbe apprezzato!


7
Quando si concede in licenza SQL su una macchina virtuale, si paga comunque per due pacchetti di licenze. Stai buttando soldi non dandogli almeno due core, anche se ricevi uno sconto educativo.
Erik Darling,

4
È possibile fare riferimento all'articolo di Glenn Barry (Microsoft MVP da 10 anni) del 2015 che elenca le CPU consigliate per SQL 2014, di cui la più piccola ha sei core.
LowlyDBA,

2
Inoltre, qualche tempo fa ho scritto un white paper per Google sul dimensionamento delle VM nel cloud. Puoi applicarlo anche on-prem.
Erik Darling,

Espandendo sul commento @sp_BlitzErik, le licenze core minime che possono essere applicate a un singolo SQL Server, sia esso VM o fisico, sono 4 licenze (consultare la Guida alle licenze ). L'alternativa è concedere in licenza i core fisici dell'host. In base a quel modello, sei libero di eseguire tutte le macchine virtuali con il numero di vCore che desideri.
Mark Storey-Smith,

Risposte:


11

Qualsiasi processo non SQL Server che consuma CPU può rendere completamente inutilizzabile l'intero SQL Server.

Ad esempio, Windows Update interromperà SQL Server durante la decompressione degli assembly .Net.

Qualsiasi processo antivirus, anche se è configurato per escludere file e cartelle di dati di SQL Server, può causare la mancata risposta di SQL Server durante la scansione dei file e la decompressione dei file di definizione dei virus aggiornati.

Se è installato un software di gestione, come IBM Tivoli Server Monitor, e decide di utilizzare il 100% di un core, probabilmente non sarà possibile fare altro che spegnere a freddo la macchina. Non chiedermi perché lo sto sollevando.

Potrei continuare, ma basti dire che qualsiasi server con un singolo core sta semplicemente chiedendo problemi con le prestazioni e la gestibilità. Verifica che qualsiasi computer con un singolo core dovrebbe essere considerato inutilizzabile oggi. Diamine, il mio telefono ha 8 core.

Mentre ci sei, convinci il ragazzo della virtualizzazione a dare a ogni SQL Server una ragionevole riserva di memoria che assicurerà che la memoria di SQL Server non venga pagata dalla memoria principale degli host su disco.

Per server SQL seri ospitati da VMware, è necessario configurare VMware in base alla Guida alle migliori pratiche di Architecting SQL Server su VMware .

Si riduce davvero a una VM single-core in grado di eseguire solo un singolo thread in qualsiasi momento. La virtualizzazione non è un proiettile d'argento per quella situazione single-core-per-thread.

I punti precedenti tengono conto del fatto che Windows NT (la base di codice del 1993 su cui sono basate tutte le versioni moderne di Windows) utilizza il multitasking preventivo. Il multitasking preventivo consente all'O / S di imporre il multitasking forzando il cambio di contesto a orari regolari. Anche con il multi-tasking preventivo, un server con un singolo core subirà comunque prestazioni molto scarse se una singola attività decide di utilizzare la maggior quantità di CPU possibile, poiché l'O / S fornirà a tale attività il tempo di CPU che può essere risparmiato pur consentendo l'esecuzione di attività con priorità più elevata, forzando la CPU al 100%. Se SQL Server è in esecuzione nel momento in cui la CPU passa al 100%, la quantità di CPU di SQL Server sarà ridotta al punto da diventare molto evidente. Negli scenari di cui sopra ho descritto, l'ho fatto nonad esempio, la macchina (o anche SQL Server) si "fermerà" completamente o "morirà"; sarebbe semplicemente falso. Tuttavia, la macchina può diventare così occupata che a tutti gli effetti la macchina diventa inutilizzabile. L'aggiunta di un secondo nucleo, sebbene non sia certamente una panacea, riduce la probabilità che la macchina non risponda completamente. Ogni core aggiuntivo significa che un altro thread può essere eseguito al 100% della CPU senza rendere la macchina inutilizzabile.


Windows Server non ha (e ha sempre avuto) il multi-tasking preventivo? A meno che non stia sbagliando quello che stai descrivendo è il multi-tasking cooperativo, i processi si arrendono l'un l'altro quando hanno svolto il loro compito di alto livello. Sicuramente la contesa potrebbe ritardare una risposta ma non dovrebbe fermare completamente le cose. Sono d'accordo che il mutli-core sia una buona idea se non la migliore pratica, ma lo scenario del giorno del giudizio che tu esponi non sembra corretto.
Mâtt Frëëman,

A volte c'è anche un buon motivo per rimanere single core, se in precedenza eri single single core e le app che parlavano alla tua istanza single core hanno rotto le migliori pratiche come non specificare un ordinamento e considerato che l'ordinamento è implicitamente stabile in assenza di tale quindi il passaggio al multi-core può mostrare bug che erano stati precedentemente soppressi per natura del single core. Se non hai il budget per ri-QA queste app o poca fiducia negli sviluppatori o forse sono già andati, abbinare i server fisici esistenti in termini di core esposti a volte può essere una scommessa sicura
Mâtt Frëëman

Ciao @ MâttFrëëman - Ho aggiunto una sezione alla mia risposta riguardante il multitasking preventivo. Mi hai ricordato di quanto sia migliorata la base di codice NT rispetto al multitasking cooperativo basato su DOS utilizzato dalla base di codice originale di Windows, fino a Windows ME incluso.
Max Vernon,

Concordo con la maggior parte dei tuoi commenti sul rimanere su single-core a volte essere un male necessario. La mia risposta presume che le macchine fisiche che sono state virtualizzate probabilmente fossero server multi-core, in base al desiderio dell'OP di avere macchine virtuali multi-core.
Max Vernon,

@MaxVernon Grazie, questo è esattamente ciò di cui avevamo bisogno!
Deb

6

Ho dovuto provare la stessa cosa prima. Ciò che alla fine è arrivato al nostro team di pianificazione delle capacità è che i nostri database erano quasi inutilizzabili durante un backup.

Come DBA, la tua più grande paura dovrebbe essere la perdita di dati. Se non è possibile eseguire con sicurezza i backup senza eseguire o causare un'interruzione, questo è un grosso problema. Esegui alcuni test per assicurarti che le prestazioni vengano influenzate durante l'esecuzione di un backup, quindi spiega che con più di un core il problema dovrebbe scomparire.


3
In effetti, qualsiasi grave quantità di I / O che sia SQL Server o non SQL Server può causare un problema.
Max Vernon,

3
@MaxVernon Assolutamente- Ho appena fatto il backup specifico perché è un problema che ho affrontato prima (alle 3 del mattino), è facile da dimostrare e "non possiamo fare backup senza un'interruzione!" dovrebbe essere sufficiente a stimolare un ragionevole gestore di infrastruttura a risparmiare un misero nucleo.
Neghtasro,

2

Per fornire una prova convincente che il tuo server ha bisogno di più di una CPU, dovrai fornire informazioni sul carico di lavoro e sulle query in esecuzione sul server. Se ha un solo database di meno di 100 MB, ad esempio, e tutte le query sono molto semplici ed efficienti, potrebbe non esserci quasi alcun vantaggio nell'avere più core.

Ti consiglierei di iniziare a catturare piani di query che vanno in parallelo e il tempo necessario per il completamento. Ciò dimostrerà che il carico di lavoro in esecuzione sul sistema trarrà vantaggio dall'avere più CPU.

Se è già in produzione nell'ambiente VM, è necessario acquisire anche i dati sulle prestazioni di utilizzo della CPU. Se puoi dimostrare che la CPU si sta esaurendo al 100% per lunghi periodi di tempo, ciò fornirebbe anche una buona prova del fatto che il sistema ha bisogno di più CPU.


5
Naturalmente, non ci saranno piani paralleli su una VM single-core. Dovresti catturare quei piani su una scatola che ha più di un singolo core.
Max Vernon,

3
Per aggiungere al commento di Max, se guardi nel piano XML su un server con un singolo core, vedrai NonParallelPlanReason="EstimatedDOPIsOne".
Erik Darling,

@Tony Ho già ho fornito loro alcuni dati, ma è stato detto che un singolo core è stata una delle migliori pratiche con una macchina virtuale. quindi il mio bisogno di aiuto!
Deb

1
@Deb Oh mio - non ho mai sentito parlare di quella buona pratica! Sento il trombone triste di Brent Ozar da qui. Sarei preoccupato per qualcuno che fa dichiarazioni come quella che è responsabile di un'infrastruttura VM.
Tony Hinkle,

@TonyHinkle - Sono d'accordo. Una VM single core non è mai una buona idea, lascia una "best practice" solitaria. Ok, forse il 99,999% delle volte invece di "mai": - /
Max Vernon

2

Forse dovresti chiedere loro perché stanno insistendo sul fatto che sarebbe una buona idea assegnare un solo core per VM SQL Server.

Quindi, a seconda della loro risposta, potresti provare a convincerli in base al punto 3.3.2 in questo link:

SqlServer-on-vmware-best-pratices

VMware raccomanda che, per il dimensionamento iniziale, il numero totale di vCPU assegnati a tutte le VM non sia superiore al numero totale di core fisici

Se quell'elemento non è la ragione per cui il team dell'infrastruttura fornisce solo 1 core per VM, probabilmente l'hardware viene sprecato.


Non sei sicuro di come il preventivo sia utile per più CPU?
LowlyDBA,

Sì, ma non è così chiaro perché il team di infraestruture non abbia aggiunto più cpus per VM.
Rogerlr,
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.