Cuando resuelvo problemas de rendimiento de la CPU en servidores SQL virtualizados que se ejecutan en VMware, una de las primeras cosas que hago es verificar que la configuración de la máquina virtual no sea un factor que contribuya al problema de rendimiento. Mientras que un servidor físico tiene el 100 % de los recursos disponibles dedicados al sistema operativo, una máquina virtual no los tiene, por lo que mirar algunos elementos básicos por adelantado elimina la solución del problema equivocado y la pérdida de tiempo. En el pasado, escribí en un blog sobre la importancia de que los DBA tengan acceso de solo lectura a Virtual Center for VMware para solucionar problemas básicos de rendimiento. Sin embargo, incluso sin acceso al Centro virtual, aún es posible encontrar información básica dentro de Windows que podría generar problemas potenciales a nivel de host que afectan el rendimiento.
Cada máquina virtual de VMware tiene dos grupos de contadores de rendimiento en Windows que se agregan cuando las herramientas de VMware se instalan en el invitado; Procesador de VM y memoria de VM. Estos contadores de rendimiento son una de las primeras cosas que observo cada vez que trabajo con una máquina virtual en VMware, porque le dan una idea de qué recursos recibe la VM del hipervisor. El grupo de procesadores de VM tiene los siguientes contadores:
- % de tiempo de procesador
- Velocidad efectiva de máquina virtual en MHz
- Velocidad del procesador del host en MHz
- Límite en MHz
- Reserva en MHz
- Acciones
En un invitado de VM que muestra un Procesador\% de tiempo de procesador alto en el Administrador de tareas o perfmon, la verificación de los contadores del Procesador de VM brindará una cuenta precisa de las asignaciones de recursos reales que recibe el invitado de VM. Si la velocidad del procesador host en MHz es 3000 y el invitado tiene 8 CPU virtuales asignadas, entonces la velocidad efectiva máxima para la máquina virtual es 24000 MHz y el contador Velocidad efectiva de la máquina virtual en MHz reflejará si la máquina virtual realmente obtiene los recursos de el anfitrión. Por lo general, cuando este es el caso, deberá comenzar a buscar en la información del nivel de host para diagnosticar más a fondo la causa raíz del problema. Pero en un compromiso reciente con un cliente, este no resultó ser el caso.
La máquina virtual del cliente en este caso coincidía con la configuración descrita anteriormente y tenía una velocidad efectiva máxima de 24000 MHz, pero el contador de velocidad efectiva de la máquina virtual en MHz solo promediaba alrededor de 6900 MHz con el tiempo del procesador porcentual de Windows de la máquina virtual vinculado a casi el 100 %. Mirar justo debajo del contador Velocidad efectiva de la máquina virtual en MHz reveló la causa del problema:el límite en MHz era 7000, lo que significa que la máquina virtual tenía un límite configurado de uso de CPU de 7000 MHz en ESX, por lo que el hipervisor la limitaba constantemente bajo carga.
La explicación de esto fue que esta VM en particular se había utilizado con fines de prueba en una prueba de concepto y originalmente estaba ubicada en un host de VM ocupado; los administradores de VM no querían que una carga de trabajo desconocida causara problemas de rendimiento en ese host. Por lo tanto, para garantizar que no afectaría negativamente las cargas de trabajo de producción reales en el host durante la POC, se limitó a permitir solo 7000 MHz de CPU o el equivalente a 2 1/3 núcleos físicos en el host. En última instancia, la eliminación del límite de CPU de VM en ESX eliminó los problemas de CPU elevados en Windows y los problemas de rendimiento que experimentaba el cliente desaparecieron.
El grupo de contadores de memoria de VM es tan importante como el grupo de procesadores de VM para identificar posibles problemas de rendimiento para SQL Server. El grupo de contadores de memoria de VM contiene los siguientes contadores:
- Memoria activa en MB
- Memoria inflada en MB
- Límite de memoria en MB
- Memoria asignada en MB
- Sobrecarga de memoria en MB
- Reserva de memoria en MB
- Memoria compartida en MB
- Memoria compartida guardada en MB
- memorias compartidas
- Memoria intercambiada en MB
- Memoria utilizada en MB
De estos contadores, los que observo específicamente son la memoria aumentada en MB y la memoria intercambiada en MB, los cuales deberían ser cero para las cargas de trabajo de SQL Server. El contador de memoria aumentada en MB indica cuánta memoria ha reclamado el controlador de globo de la máquina virtual invitada debido a un exceso de compromiso de memoria en el host, lo que hará que SQL Server reduzca el uso de memoria para responder a la presión de memoria en Windows causada por el controlador de globo. inflando para quitar memoria de la máquina virtual. El contador de memoria intercambiada en MB realiza un seguimiento de la cantidad de memoria paginada en el disco por el hipervisor del host debido a la sobreasignación de memoria en el host que no se pudo resolver aumentando los invitados de VM con el controlador de globo. La guía de mejores prácticas de VMware para SQL Server recomienda el uso de reservas para garantizar que SQL Server no se incremente o se desplace por motivos de rendimiento, pero muchos administradores de máquinas virtuales dudan en establecer reservas estáticas porque reducen la flexibilidad del entorno.
Las herramientas de monitoreo, como SentryOne V Sentry, también pueden ayudar. Considere el caso en el que es posible que no tenga acceso directo a vCenter, pero alguien puede configurar el monitoreo en su nombre. Ahora puede obtener una excelente visualización e información sobre problemas de CPU, memoria e incluso disco, tanto a nivel de invitado como de host, y también todo el historial que conlleva. En el panel a continuación, puede ver las métricas del host a la izquierda (incluidos los desgloses de la CPU para la parada conjunta y el tiempo de preparación) y las métricas de los invitados a la derecha:
Para probar esta y otras funciones de SentryOne, puede descargar una versión de prueba gratuita.
Conclusión
Al solucionar problemas de rendimiento en servidores SQL virtualizados en VMware, es importante analizar el problema desde un punto de vista holístico en lugar de realizar una resolución de problemas "instintiva" utilizando solo información limitada. Los contadores específicos de VMware en el Monitor de rendimiento pueden ser una excelente manera de verificar rápidamente que la VM obtiene las asignaciones de recursos básicos del host, antes de tomar medidas adicionales para solucionar el problema.