Durante la risoluzione dei problemi di prestazioni della CPU su SQL Server virtualizzati in esecuzione su VMware, una delle prime cose che faccio è verificare che la configurazione della macchina virtuale non sia un fattore che contribuisce al problema delle prestazioni. Laddove un server fisico ha il 100% delle risorse disponibili dedicate al sistema operativo, una macchina virtuale no, quindi guardare in anticipo alcuni elementi di base elimina la risoluzione dei problemi sbagliati e la perdita di tempo. In passato ho scritto sul blog dell'importanza che i DBA abbiano accesso in sola lettura a Virtual Center per VMware per la risoluzione dei problemi di base dei problemi di prestazioni. Tuttavia, anche senza l'accesso al Centro virtuale, è comunque possibile trovare alcune informazioni di base all'interno di Windows che potrebbero causare potenziali problemi a livello di host che influiscono sulle prestazioni.
Ogni macchina virtuale VMware dispone di due gruppi di contatori delle prestazioni in Windows che vengono aggiunti quando gli strumenti VMware vengono installati nel guest; Processore VM e memoria VM. Questi contatori delle prestazioni sono una delle prime cose che guardo ogni volta che lavoro con una macchina virtuale su VMware, perché danno un'occhiata alle risorse che la macchina virtuale sta ricevendo dall'hypervisor. Il gruppo Processore VM ha i seguenti contatori:
- % tempo di elaborazione
- Velocità effettiva della VM in MHz
- Velocità del processore host in MHz
- Limite in MHz
- Prenotazione in MHz
- Azioni
In un guest della macchina virtuale che mostra un Processore\% tempo di elaborazione elevato in Task Manager o perfmon, il controllo dei contatori del processore della macchina virtuale fornirà un resoconto accurato delle allocazioni di risorse effettive che il guest della macchina virtuale sta ricevendo. Se la velocità del processore host in MHz è 3000 e al guest sono allocate 8 CPU virtuali, la velocità massima effettiva per la VM è 24000 MHz e il contatore della velocità effettiva della VM in MHz rifletterà se la VM sta effettivamente ricevendo le risorse da il padrone di casa. Di solito, quando questo è il caso, dovrai iniziare a guardare le informazioni a livello di host per diagnosticare ulteriormente la causa principale del problema. Ma in un recente coinvolgimento del cliente, non è stato così.
La VM client in questo caso corrispondeva alla configurazione sopra descritta e aveva una velocità effettiva massima di 24000 MHz, ma la velocità effettiva della VM in MHz era in media solo intorno a 6900 MHz con il tempo del processore percentuale di Windows della VM fissato a quasi il 100%. Guardando appena al di sotto del contatore di velocità effettiva della VM in MHz, è stata rilevata la causa del problema:il limite in MHz era 7000, il che significa che la VM aveva un limite configurato di utilizzo della CPU a 7000 MHz in ESX, quindi veniva costantemente limitato dall'hypervisor in carico.
La spiegazione di ciò era che questa particolare VM era stata utilizzata a scopo di test in una prova di concetto ed era originariamente collocata su un host VM occupato; gli amministratori della macchina virtuale non volevano che un carico di lavoro sconosciuto causasse problemi di prestazioni su quell'host. Pertanto, per garantire che non avrebbe un impatto negativo sui carichi di lavoro di produzione reali sull'host durante il POC, è stato limitato a consentire solo 7000 MHz di CPU o l'equivalente di 2 1/3 core fisici sull'host. In definitiva, la rimozione del limite della CPU della VM in ESX ha eliminato i problemi elevati della CPU all'interno di Windows e i problemi di prestazioni riscontrati dal client sono scomparsi.
Il gruppo di contatori di memoria VM è importante quanto il gruppo Processore di macchine virtuali per identificare potenziali problemi di prestazioni per SQL Server. Il gruppo di contatori di memoria VM contiene i seguenti contatori:
- Memoria attiva in MB
- Memoria a palloncino in MB
- Limite di memoria in MB
- Memoria mappata in MB
- Sovraccarico di memoria in MB
- Prenotazione di memoria in MB
- Memoria condivisa in MB
- Memoria condivisa salvata in MB
- Condivisioni di memoria
- Memoria scambiata in MB
- Memoria utilizzata in MB
Di questi contatori, quelli che esamino in modo specifico sono Memory Ballooned in MB e Memory Swapped in MB, che dovrebbero essere entrambi zero per i carichi di lavoro di SQL Server. Il contatore Memoria in MB indica quanta memoria è stata recuperata dalla macchina virtuale guest dal driver del fumetto a causa del sovraccarico della memoria nell'host, che farà sì che SQL Server riduca l'utilizzo della memoria per rispondere alla pressione della memoria in Windows causata dal driver del fumetto gonfiaggio per sottrarre memoria alla VM. Il contatore Memoria scambiata in MB tiene traccia della quantità di memoria che è stata paginata su disco dall'hypervisor host a causa di un overcommit di memoria sull'host che non è stato possibile risolvere eseguendo il ballooning dei guest VM con il driver del fumetto. La guida alle best practice di VMware per SQL Server consiglia di utilizzare le prenotazioni per garantire che SQL Server non venga ampliato o paginato per motivi di prestazioni, ma molti amministratori di macchine virtuali sono riluttanti a impostare prenotazioni statiche perché riduce la flessibilità ambientale.
Anche gli strumenti di monitoraggio, come SentryOne V Sentry, possono aiutare. Considera il caso in cui potresti non avere accesso diretto a vCenter, ma qualcuno può impostare il monitoraggio per tuo conto. Ora puoi ottenere un'ottima visualizzazione e informazioni dettagliate su CPU, memoria e persino problemi del disco, sia a livello di ospite che di host, e anche tutta la cronologia che ne deriva. Nella dashboard in basso, puoi vedere le metriche dell'host a sinistra (inclusi i guasti della CPU per il tempo di sosta e di preparazione) e le metriche degli ospiti a destra:
Per provare questa e altre funzionalità di SentryOne, puoi scaricare una versione di prova gratuita.
Conclusione
Durante la risoluzione dei problemi di prestazioni su SQL Server virtualizzati su VMware, è importante esaminare il problema da un punto di vista olistico invece di eseguire la risoluzione dei problemi "a scatti" utilizzando solo informazioni limitate. I contatori specifici di VMware in Performance Monitor possono essere un ottimo modo per verificare rapidamente che la macchina virtuale stia ricevendo le allocazioni di risorse di base dall'host, prima di intraprendere ulteriori passaggi per la risoluzione del problema.