Quali sono le migliori pratiche per l'esecuzione di SQL Server in una macchina virtuale?


21

Quali sono le migliori pratiche per l'esecuzione di SQL Server in una macchina virtuale? Le mie attività di transazione online sono molto basse, ma vi è un'elevata quantità di elaborazione dei dati allo scopo di fornire dati di reporting a più siti Web.


2
Dove vengono archiviati i dischi? su un HDD locale da 5400 RPM? Su una SAN con connessioni in fibra e dischi mandrino da 15k? Tutte le VM in questi giorni riguardano IO, la CPU non è quasi nulla in considerazione.
jcolebrand

No, non locale. Ma non conosco i dettagli della SAN.
JerryOL

2
Non posso aggiungere commenti perché non ho ancora abbastanza reputazione, ma [secondo Microsoft] [1] nel 2008 R2 c'è poca differenza di prestazioni tra dischi virtuali fissi e dinamici. [1]: blogs.msdn.com/b/tvoellm/archive/2009/08/05/…
Terry Bochaton,

@Terry, in futuro sentiti libero di contrassegnare una simile risposta e la convertiremo per te.
jcolebrand

Risposte:


18

Come per le macchine fisiche, IO è il re. La virtualizzazione produrrà un notevole hit di I / O (la quantità di hit dipende dalla tecnologia scelta), quindi assicurati di non fare nulla che possa aggravare questo e danneggiare ulteriormente le prestazioni di I / O.

  • Utilizzate sempre dimensioni fisse, non dischi virtuali dinamici e assicuratevi che le unità / array sottostanti siano sufficienti. I vdisk dinamici sono meno performanti di quelli a dimensione fissa.
  • Se i dati nelle VM non sono di importanza critica, attivare la capacità delle soluzioni VM di memorizzare nella cache le scritture (mentendo efficacemente al sistema operativo guest su quando le cose sono fisicamente scritte su disco) per prestazioni extra. Ciò è utile per una macchina di sviluppo e test in cui i dati possono essere facilmente sostituiti o repliche di sola lettura locali per il master che possono essere ricreate in caso di problemi, ma si consiglia di mantenere tali opzioni per i sistemi di produzione e backup come aumentano la possibilità di perdita di dati (o peggio, corruzione) se la macchina si spegne inaspettatamente.
  • Accertarsi che ogni VM disponga di RAM sufficiente dedicata ad essa in modo tale che il normale set di lavoro di ciascun database si adatti alla memoria con una discreta quantità di spazio da risparmiare per evitare inutili operazioni di I / O. Inoltre, assicurarsi che l'hypervisor non esegua il paging della RAM delle VM in qualsiasi momento (ad esempio, la maggior parte dei prodotti VMWare può farlo, il che consente di eseguire un set più ampio di VM di quanto si farebbe altrimenti sullo stesso hardware, ma il degrado delle prestazioni può essere massiccio: esiste un'opzione per ottimizzare o disattivare questo comportamento).
  • Se l'host utilizza array RAID5, considerare di passare a RAID10. Ciò ridurrà lo spazio disponibile ma rimuoverà i problemi di prestazioni di scrittura che possono essere evidenti con RAID5 (o 6).
  • Per le VM che probabilmente vedranno molta attività di I / O, prendere in considerazione la possibilità di assegnare loro il proprio drive o array o di condividere i propri drive / array / i con dati che vedono bassa attività.

Ovviamente se l'intero DB (e tutto il resto della VM è in esecuzione) si adatta alla RAM allocata alla VM e vede pochissima attività di scrittura, le prestazioni di I / O possono essere molto meno problematiche.

Modifica: qualche altro punto:

  • Se si utilizzano dischi virtuali, assicurarsi che venga utilizzato il tipo di controller migliore per le prestazioni. Alcune soluzioni di virtualizzazione offrono diversi tipi di controller virtuali per una migliore compatibilità dei guest e alcuni potrebbero essere meno efficienti di altri a causa delle limitazioni del protocollo nella progettazione che stanno emulando e delle limitazioni nei driver del sistema operativo guest.
  • Se la tua soluzione di virtualizzazione offre driver specifici per il controller di unità virtuale, assicurati che il sistema operativo guest li stia utilizzando: questi possono accelerare l'Io di massa riducendo il numero di copie da memoria a memoria e il contesto ospite <-> hypervisor <-> ospite interruttori coinvolti in alcune operazioni.
  • I due punti precedenti si applicano se si utilizza l'archiviazione di rete come semplici condivisioni SMB o anche iSCSI: assicurarsi di utilizzare il controller di rete virtuale più efficiente offerto e che il sistema operativo guest utilizzi il driver consigliato per esso, altrimenti entrambi latenza e la larghezza di banda può essere più limitata di quanto sia necessario dal livello di virtualizzazione.

1
Bene, sì e no. Un volume SAN montato nella VM tramite un iniziatore iSCSI sarà dannatamente veloce!
Gaius,

1
@Gaius: buon punto. Ho aggiunto una nota relativa a vNIC e driver, che probabilmente saranno la fonte di ulteriori colli di bottiglia in quei casi.
David Spillett,

9

1
~ Ci sono parti di ciò che potresti voler evidenziare dagli articoli?
jcolebrand

2
No. Dato che la virtualizzazione può essere un argomento complesso, consiglierei di leggerlo tutto. Non è poi così tanto. Se l'OP è alla ricerca di una risposta rapida, probabilmente non sarà la risposta corretta.
Eric Humphrey - lotsahelp,

Cercavo le migliori pratiche in generale. Dopo aver appena spostato SQL Server 2000 Standard in una nuova macchina virtuale, sto cercando di risolvere i problemi con i siti Web che chiamano procedure memorizzate che ora scadono se non sono memorizzate nella cache; anche se la memoria fisica e VM assegnata è la stessa, 4 GB.
JerryOL

1
@JerryOL: assicurarsi che non sia possibile eseguire il paging della RAM allocata alla VM (altrimenti allocare 4Gb alla VM non equivale a disporre di 4 GB sulla macchina fisica) e se la soluzione di virtualizzazione utilizzata offre diversi tipi di controller virtuali si assicura che venga selezionato quello migliore e che venga utilizzato il driver giusto dal sistema operativo guest.
David Spillett,
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.