Recursos dedicados en máquinas virtuales que alojan SQL Server


8

Tengo entendido que uno de los grandes beneficios de usar una VM es que puede compartir recursos entre las máquinas virtuales en un host. Por lo tanto, puede tener un host con 120 CPU y poner 5 VM en él con 32 CPU cada uno. Las CPU adicionales se "comparten" entre las VM con el host que asigna CPU dinámicamente según la necesidad. Lo mismo para la memoria.

También entendí que este es un gran no-no para las máquinas virtuales que alojan servidores SQL, pero mis administradores de máquinas virtuales no están de acuerdo. ¿Alguien tiene alguna evidencia o documentación de una manera u otra?

No sé si importa, pero estamos usando VMWare.


2
Por extraño que parezca, acabamos de tener un problema con las failovers aleatorias en un grupo de disponibilidad virtualizado. nos suscribimos en exceso en la CPU con un tiempo de espera de ~ 8 segundos. el oyente ag perdió su arrendamiento de clúster y fracasó al otro nodo HA. La dificultad aquí es que no se presenta como presión de CPU en el huésped, a pesar de que el error generalmente se asocia con una presión sostenida de la CPU. Esto lleva al mayor problema con la virtualización: saber lo que está sucediendo y confiar en que otros hagan lo mismo.
swasheck

Una muy buena publicación de blog sobre VMware CPU Hot Plug vNUMA Effects en SQL Server por Jonathan Kehayias
Kin Shah

por cierto: normalmente no es "Lo mismo para la memoria". En la mayoría de los casos, comparte la CPU, pero se asigna una cantidad específica de memoria a cada VM, y esta memoria no se comparte. Compartir la CPU con un servidor SQL podría estar bien, dependiendo de la carga total de la CPU para todas sus
máquinas virtuales

@MTilsted Perdón por la confusión. Cuando dije "Lo mismo para la memoria", me refería específicamente a que se couldcompartiera. Cuando estaba haciendo la pregunta, me di cuenta de que bien podría ser diferente para las CPU y la memoria, pero que ambas eran una opción.
Kenneth Fisher

Respuestas:


15

Lo que estás preguntando es: "¿Está bien si comprometemos en exceso las CPU?"

Está bien hasta que comience a experimentar cuellos de botella de rendimiento relacionados con el consumo de CPU. La misma respuesta también es válida con el exceso de compromiso de la red: no es como si estuvieras colocando 5 tarjetas Ethernet de 10 Gb separadas en el host y dedicando una tarjeta por VM. La virtualización se trata de un compromiso excesivo y de recorrer la línea entre la disponibilidad de recursos y los requisitos de recursos.

Sin embargo, en términos generales, no desea comprometerse demasiado en la memoria, ya que SQL Server utilizará activamente la memoria que le presente. En lugar de dejar que las máquinas virtuales paginen en el disco del host, es mejor que haga un análisis de máquina por máquina virtual para descubrir qué máquinas virtuales podrían vivir con menos memoria y, luego, para configurarlas con menos memoria.


No olvidemos la importancia de los discos físicos dedicados e independientes también; uno para Datos, Registros y Tempdb . :)
Chiramisu

13

El problema que veo con la asignación dinámica de algunos recursos es que conduce a un rendimiento impredecible. La consulta de informes x tenía 32 CPU disponibles ayer, y se ejecutó en 4 minutos, hoy solo tiene 24 y tomó mucho más tiempo. También puede ver la latencia mientras el invitado espera a que otros núcleos estén disponibles.

Jonathan Kehayias ofrece algunas advertencias prácticas sobre la suscripción excesiva de CPU y memoria aquí (y, francamente, confío en su experiencia y asesoramiento más que en un administrador de VM típico, sin ofenderles, pero sospecho que tiene mucha más experiencia directa con la combinación):


11

Tengo entendido que cierto nivel de exceso de compromiso de la CPU puede estar perfectamente bien, pero eso depende totalmente de los requisitos de carga de trabajo de todos los invitados. Visite el blog de David Klee para obtener una gran cantidad de buena información de VM. Específicamente http://www.davidklee.net/articles/sql-server-articles/cpu-overcommitment-and-its-impact-on-sql-server-performance-on-vmware/ para la explicación del exceso de compromiso de la CPU y su impacto en SQL Server

El compromiso excesivo de la memoria es un animal completamente diferente y, en general, el host VM no debe comprometerse demasiado en la memoria si está ejecutando servidores SQL. Una vez más, usaré a David Klee como referencia. http://www.davidklee.net/2013/11/04/lock-pages-in-memory-in-sql-server-on-vmware-why-or-why-not/ donde explica los efectos de la memoria sobre -compromiso.

Espero que esto ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.