Escribí una aplicación hace unos meses y la estaba alojando fuera de nuestras oficinas en una estación de trabajo con Intel Core 2 Quad Q8200 @ 2,33 GHz, 8 GB de RAM, Windows Server 2008 Enterprise y SQL Server 2008 Enterprise. Tanto el servidor web como el servidor de base de datos se ejecutaron en la misma máquina.
Tuvimos una gran afluencia de tráfico, trasladamos ClubUptime.com y obtuvimos 2 de sus principales máquinas virtuales de Windows. El servidor de base de datos ejecuta Windows 2008 R2 Standard y SQL Server 2008 R2 Web en 8 GB de RAM y un Intel Xeon e5620 a 2,40 GHz.
Desde el cambio, la base de datos que solía ejecutarse con alrededor de 400 MB de RAM ahora funciona con alrededor de 4 a 7 GB, y no ha habido ningún cambio (aparte de un par de columnas aquí y allá). Nuestro tráfico se ha cuadruplicado y nuestra base de datos tiene 6 GB en disco, ¿por qué el servidor SQL ocuparía 7 GB si la base de datos tiene solo 6? ¿Y por qué almacenaría TODA la base de datos en la memoria?
Otra cosa es ¿por qué al crecer 4 veces su tamaño, la huella de memoria de la base de datos creció 12 veces?
Última pregunta: ¿Por qué la CPU se fija ahora al 100% donde antes no lo hacía? El diseño es simple, MUY pocas uniones, SIN subconsultas. Simplemente estoy perdido, a menos que sea la edición del servidor SQL o el hecho de que pasé del hardware real a una máquina virtual.
Respuesta1
SQL Server utilizará tanta memoria como sea posible para no perder demasiado el sueño por la huella de memoria a menos que haya otros problemas. Si puede, almacenará todo, la RAM siempre es más rápida que el disco y si no se usa para nada más, ¿por qué no?
Ejecutar SQL en una VM puede resultar problemático. Funciona bien, pero hay problemas de rendimiento con la virtualización y, como muchas personas han comentado aquí, SQL se ve afectado por esto de manera más significativa que la mayoría de las otras aplicaciones. Mucho también depende de su instancia de VM: si el hipervisor es un host VMware vSphere, funcionará mejor con recursos reales equivalentes que Xen, si está respaldado por Hyper-V y las tasas de contención son bajas (como en muy, muy pocas VM). en el host) entonces puede ser bastante bueno. Los únicos sistemas que he tenido que desvirtualizar han sido todos los servidores SQL.
No especifica cuántas CPU virtuales le están dando para su VM, dudo mucho que obtenga los 8 núcleos que el Xeon 5620 puede presentar a una VM. Incluso si es así, es posible que esto no sea óptimo. En general, una máquina virtual con 4 vCPU en esa plataforma debería poder igualar su plataforma física anterior, suponiendo que el Xeon 5620 tenga aproximadamente un 30% mejor reloj por reloj que el Core 2 Quad del que vino, pero si realmente lo hace depende del hipervisor subyacente, el configuración del sistema host y cuánta contención hay de otras máquinas virtuales alojadas en el mismo hipervisor.
Por lo general, no se puede confiar en los contadores de rendimiento dentro de una máquina virtual, o al menos no se puede confiar en que le digan todo. Realmente necesita obtener una vista del rendimiento desde la perspectiva del hipervisor para saber si su VM realmente está alcanzando el 100% de la capacidad de las CPU reales del sistema.