it-swarm.it

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

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.

21
JerryOL

Come per le macchine fisiche IO è il re. Ci sarà un evidente IO hit dalla virtualizzazione (la quantità di hit dipende dalla tecnologia scelta), quindi assicurati di non fare nulla che possa esacerbare questo e danneggiare IO prestazioni ulteriormente.

  • 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 macchine virtuali non sono di importanza critica, attivare la capacità VM soluzioni per memorizzare nella cache le scritture (effettivamente mentendo al SO guest su quando le cose sono fisicamente scritte sul disco) per prestazioni extra. è 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 in quanto aumentare la possibilità di perdita di dati (o peggio, corruzione) se la macchina si spegne inaspettatamente.
  • Assicurarsi che each VM ha abbastanza RAM dedicato ad esso in modo tale che il normale set di lavoro di ciascun database si adatti alla memoria con una buona quantità di spazio da evitare per evitare IO non necessario. Inoltre, assicurarsi che l'hypervisor non esegua il paging delle VM RAM in qualsiasi momento (ad esempio la maggior parte dei prodotti VMWare può farlo, il che consente di eseguire un set di VM più grande di te) altrimenti potrebbe essere sullo stesso hardware, ma il degrado delle prestazioni può essere enorme - 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 molte IO, prendi in considerazione l'idea di dare loro la propria unità o array o farle solo condividere le loro unità/array con i dati che vedono bassa attività.

Naturalmente se l'intero DB (e tutto il resto del VM è in esecuzione) si adatta al RAM allocato al VM e vede pochissima attività di scrittura, IO le prestazioni 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 tuo SO guest li stia usando - questi possono accelerare bulk IO riducendo il numero di copie da memoria a memoria e Host <-> hypervisor <-> switch di contesto guest coinvolti in alcune operazioni.
  • I due punti precedenti si applicano se si utilizza l'archiviazione di rete come simple SMB o iSCSI: assicurarsi di utilizzare il controller di rete virtuale più efficiente offerto e che il sistema operativo guest stia utilizzando il driver consigliato per questo, altrimenti sia la latenza che la larghezza di banda potrebbero essere più limitate di quanto non sia necessario dal livello di virtualizzazione.
18
David Spillett