Requisitos generales de memoria para SQL Server 2008 R2

11

No tengo experiencia con el trabajo de DBA, pero estoy tratando de presentar un caso para solicitar recursos adicionales para nuestro servidor sql y esperaba poder obtener algunas personas inteligentes para proporcionar una estimación aproximada de lo que deberíamos estar ejecutando. Sospecho que la asignación de recursos que TI ha dado a nuestro servidor sql de producción es baja.

Hardware software:

Base de datos: base de datos empresarial sql server 2008 r2

Windows: Windows 2008 r2 Enterprise de 64 bits, bastante seguro que se ejecuta en VMware.

Procesador: Intel (R) Xeon (R) CPU E7-4860 @ 2.27GHz 2.26 GHz (2 procesadores)

Memoria instalada: 4 GB

Disco duro para archivos de base de datos: 300 GB

Disco duro para copias de seguridad: 150 GB

Disco duro para registros: 100 GB

Solicitud:

Tenemos 3 bases de datos principales que suman aproximadamente 170 GB de datos, una base de datos de Reporting Services (SSRS) en el mismo servidor que alberga quizás 10 informes diferentes (que comprenden un promedio de 700k registros cada uno) que se generan diariamente. Nuestra base de usuarios es de aproximadamente 20 usuarios simultáneos, tal vez 5 de ellos podrían considerarse "intensivos en recursos" con la generación de grandes informes de procesamiento de datos. La mayoría de los usuarios interactúan con la base de datos a través del sitio web asp.net y el sitio web del servidor de informes. Además, nuestros desarrolladores usan SSIS en BIDS de forma extensiva mediante la comunicación remota directamente al servidor (2 conexiones remotas como máximo). Finalmente, tenemos una operación de almacenamiento de datos bastante complicada que probablemente trae 3 millones de registros por día a través de paquetes SSIS que también se ejecutan en el servidor.

Problemas actuales:

Tenemos tiempos de espera de servidor severos crónicos y el tiempo de respuesta al sitio web es bastante malo. Sospecho que la cantidad de memoria que tenemos (4 GB) es probablemente un gran cuello de botella. Nuestras solicitudes anteriores de memoria adicional se han denegado con la respuesta común de que necesitamos realizar más optimizaciones de consultas. Si bien no somos profesionales de SQL o (como estoy seguro de que puede ver por nuestra configuración) profesionales de administración de DB, quiero asegurarme de que no estoy gastando todo mi tiempo tratando de exprimir poco rendimiento potencial si el hardware es el embotellamiento.

Gracias a todos por el tl; dr evitación!

RMuesi
fuente
77
¿Esperan dar servicio a 170 GB de datos con 4 GB de memoria? Ningún ajuste de consultas solucionará eso, y están fuera de su árbol.
Aaron Bertrand
Muéstreles los números (estadísticas de rendimiento). También puede mostrarles la documentación de Microsoft que muestra que la memoria mínima para Windows Server 2008 R2 es de 4 GB; Esto no deja mucho para SQL Server.
2
¿Qué muestran sus estadísticas de espera? Sospecho que está viendo un montón de PAGEIOLATCH_XX esperando sus consultas. Si es así, puede usarlo como prueba de que algo de memoria adicional sería beneficioso.
SQLRockstar
2
Y si tiene memoria, puede comenzar a trabajar en un mejor subsistema IO. El disco duro para una base de datos bien utilizada es una broma de IOPS. Eso debería ser DRIVES. No compra unidad como capacidad, para bases de datos que compra unidad como fuente IOPS. Lo que significa que un SSD de 512 gb sería bueno para los archivos de la base de datos. El estándar "vamos a hacerlo grande y barato" matará la base de datos.
TomTom
@TomTom Estoy seguro (espero) que tenemos una matriz de incursiones. Sin embargo, no estoy seguro de cómo detectarlo. Estaba basando la descripción del disco duro en lo que el explorador de ventanas de la computadora estaba mostrando en el servidor de Windows.
RMuesi

Respuestas:

14

... esperaba poder obtener ... una estimación aproximada de lo que deberíamos estar ejecutando.

Sin más información sobre sus consultas y tamaños de datos, es realmente difícil darle cualquier tipo de estimación, y mucho menos una estimación precisa.

Base de datos: base de datos empresarial sql server 2008 r2

Windows: Windows 2008 r2 Enterprise de 64 bits, bastante seguro que se ejecuta en VMware.

Procesador: Intel (R) Xeon (R) CPU E7-4860 @ 2.27GHz 2.26 GHz (2 procesadores)

Memoria instalada: 4 GB

Dos procesadores (supongo que esto está expuesto en la máquina virtual como 2 núcleos) pueden o no tener un aprovisionamiento insuficiente. Los núcleos asignados a una VM no están necesariamente asignados directamente a núcleos físicos (¡o incluso se les permite usar el 100% de un solo núcleo cuando sea necesario!), Por lo que puede encontrar que este es un recurso más flexible que la memoria. Sin más información sobre su carga de trabajo o configuración de hardware / virtualización, diría que aumentar esto a 4 sería bueno.

Asignación de memoria. Oh chico. Esto está muy poco aprovisionado para la carga de trabajo. Windows mismo necesita un mínimo de 2-3 GB para mantenerse feliz, y cada uno de los 2 usuarios que ejecutan BIDS en la caja requerirá al menos 500 MB cada uno. Y con eso, el cuadro ya está al máximo, y ni siquiera comencé a calcular cuánto va a necesitar la base de datos .

La mayoría de los usuarios interactúan con la base de datos a través del sitio web asp.net y el sitio web del servidor de informes.

No lo dijo, pero si estos se ejecutan en el mismo cuadro, los requisitos de memoria para ellos también deben tenerse en cuenta.

Finalmente, tenemos una operación de almacenamiento de datos bastante complicada que probablemente trae 3 millones de registros por día a través de paquetes SSIS que también se ejecutan en el servidor.

Suponiendo que esto se ejecuta por la noche cuando no hay usuarios en vivo en el sistema, no veo esto como un problema a menos que tarde demasiado en ejecutarse. Esta parte de las cosas es la menor de tus preocupaciones; Los usuarios en vivo son más importantes.

Nuestras solicitudes anteriores de memoria adicional se han denegado con la respuesta común de que necesitamos realizar más optimizaciones de consultas.

Como demostré anteriormente, la cantidad actual de memoria aprovisionada es completamente inadecuada. Al mismo tiempo, sin embargo, en el otro extremo del espectro, es extremadamente improbable que pueda obtener suficiente memoria aprovisionada para poder mantener toda la base de datos en la memoria a la vez.

Aunque recibió una respuesta general como esa (que, por cierto, probablemente tuvo más que ver con lo persuasiva que era su justificación de recursos adicionales, y no con el uso real de los recursos en sí), es muy probable que la eficiencia de la base de datos pueda ser mejorado. Sin embargo, no hay una cantidad de ajuste solo que pueda solucionar los problemas que está experimentando ahora; la sugerencia de eso es un completo no iniciador para mí.

Adoptaría el enfoque general de que la cantidad de memoria aprovisionada actualmente está por debajo del mínimo requerido (que debe corregirse lo antes posible), y se pueden requerir recursos adicionales para mejorar la experiencia del usuario a un nivel utilizable mientras se realizan mejoras para aumentar la eficiencia de los sistemas

Aquí hay algunos pensamientos (en orden de ataque):

  • Va a ganar si se puede probar cuánto rendimiento mejora cada vez que reciba más recursos aprovisionados. Realice un seguimiento de las métricas de rendimiento utilizando el registro de Monitor de rendimiento (nota: la parte de registro es muy importante), incluidos los tiempos de respuesta del sitio web si puede. Comience a hacer esto ahora , antes de hacer cualquier otra cosa. Cuando finalmente llegue a la cantidad mínima de memoria (no obtendrá 32 GB de inmediato), de repente ahora tiene evidencia de que la memoria agregada mejoró las cosas ... ¡lo que significa que agregar aún más probablemente también ayude! Si no recopila una línea de base en la configuración actual, perderá el bote cuando las cosas suban al nivel mínimo recomendado.

  • Analiza las estadísticas de espera de tu servidor . Esto le dirá cuál es el mayor cuello de botella en el sistema. Probablemente tendrá PAGEIOLATCH_XXel tiempo de espera más común / más alto, lo que indica que se está haciendo demasiada E / S para recuperar páginas del disco. Esto se puede aliviar agregando memoria, por lo que las E / S físicas se vuelven menos frecuentes ya que los datos necesarios ya están en la memoria. Si bien este análisis es prácticamente una conclusión inevitable, el hecho de que haya recopilado estas estadísticas le brinda más munición al justificar la necesidad de recursos.

  • Como mencioné anteriormente, no se cumple el requisito mínimo básico de memoria. Recopile el conjunto de requisitos de hardware recomendados para todo el software que está ejecutando, y tal vez también tome capturas de pantalla del Administrador de tareas. Esto solo debería ser suficiente para justificar al menos 4-8 GB más, en el acto. Si todavía se niegan, intente convencerlos de que le permitan probarlo durante una semana y devuélvalo después de eso (está recopilando estadísticas de rendimiento, por lo que no tendrá que devolverlo porque a mediados de la semana usted ' podrá probar cuánto ha mejorado la situación). Si todavía se niegan, estás siendo configurado para fallar; URLT .

  • Si puede descargar parte de la carga de trabajo (en particular, evite la conexión remota si es posible), esto aumentará la cantidad de memoria disponible para la base de datos, lo cual es más crítico.

  • No podrá ajustar toda la base de datos en la memoria a la vez, lo que significa que debe establecer la configuración de memoria máxima de SQL Server con mucho cuidado para evitar el exceso de memoria , lo que mata el rendimiento como ninguna otra cosa . El exceso de compromiso es incluso peor que simplemente no poder ajustar todos los datos en la memoria. Es muy probable que esté en este escenario en este momento simplemente porque simplemente no hay memoria disponible en absoluto, y es probable que la configuración de memoria máxima esté establecida en el valor predeterminado (ilimitado).

  • Como está ejecutando SQL Server Enterprise Edition y la memoria es muy importante, consideraría implementar la compresión de datos . Esto compensará un aumento en el uso de la CPU para ahorrar espacio en la memoria (y, por lo tanto, reducir los accesos al disco, que son comparativamente muy lentos).

  • Ajusta la base de datos. Es probable que las estructuras y consultas puedan usar mejoras en lo que respecta a los patrones de indexación y acceso. Además, si se escanean y agregan muchos datos con frecuencia, puede ser muy útil crear vistas indexadas, tablas de resumen o informes precalculados.

  • Esto podría ser una posibilidad remota porque probablemente signifique más aprovisionamiento de hardware, pero implemente una solución de almacenamiento en caché. La consulta más rápida es la que nunca haces .

Esas son solo algunas ideas. La conclusión es que el ajuste solo no resolverá los problemas aquí, ni el hardware solo, aunque este último probablemente aliviará la mayoría de los problemas inmediatos. Así es como funciona: arroje el hardware al problema a corto plazo para apagar el fuego, y ajuste el problema a largo plazo para solucionar la causa raíz lo mejor que pueda.

Jon Seigel
fuente
1
John Me encanta tu respuesta y +1, pero en este escenario, parece que el comentario de Aaron lo golpeó en la cabeza y simplemente necesitan más carnero, sin importar cuánto intenten sintonizarlo.
Ali Razeghi
2
@ Ali: Sí, estoy de acuerdo, y lo mencioné en mi respuesta. Principalmente quería centrarme en estrategias para obtener más RAM, porque ese parece ser el problema aquí. (Si simplemente no está disponible, ese es un tema separado)
Jon Seigel
Muchas gracias por la respuesta detallada! Soy nuevo en el ajuste de rendimiento de db, así que solo estoy tratando de entender por dónde empezar. Tengo material de lectura y Monitor de rendimiento, ahora solo tengo que entender las métricas. Pero sus sugerencias proporcionan una buena hoja de ruta para abordar este problema. Gracias de nuevo.
RMuesi
@RMuesi: De nada. Si tiene alguna pregunta específica sobre cómo lograr lo que necesita hacer, siéntase libre de publicarla (busque primero, por supuesto) y la comunidad estará encantada de ayudarlo.
Jon Seigel
9

Esta es la locura de la cuenta 'contador de frijoles' ¡Los $ 1100- $ 2500 que gastaría en RAM podrían pagarse en una semana !

Están obteniendo tiempos muertos para 20 empleados y 5 de ellos están haciendo un trabajo 'intensivo en recursos'. Me imagino que su tiempo no es barato, y algunos de esos informes son los que al jefe que no firma en el cheque le encantaría. Son toneladas de desperdicio gastado retransmitiendo y lidiando con la frustración.

Explíqueles que probablemente estén buscando entre $ 15 y $ 20 por GB por RAM. 128 GB de RAM serían aproximadamente $ 2200- $ 2500 en este momento, y los precios de RAM actualmente han subido un poco. Incluso si la placa base de su servidor no puede soportarlo (eso sería extraño), entonces 64 GB serían $ 1100- $ 1200 (acabo de comprobarlo, y esa es la calidad de ram de servidor de Dell sin descuentos aplicados). Incluso 64 GB de RAM podrían hacer una GRAN diferencia (especialmente si nos aseguramos de evitar escaneos de tablas de tablas grandes).

Calcule cuánto tiempo se pierde y pregúnteles si vale entre $ 1100- $ 2500. Si solo gasta $ 1100 y obtiene 64 GB de RAM, asegúrese de evitar escaneos de tablas en tablas grandes. Use más disco con índices (si tiene la latencia para soportarlo) para evitar escaneos grandes que descargan memoria.

Ali Razeghi
fuente
55
Bien dicho por la locura. La memoria de 4 GB es menor de lo que sugeriría en estos días para un escritorio. Y eso ahora está tratando de ejecutarse en un entorno de base de datos de 170 gb. Maldición broma. Pero bueno, la virtualización para los contadores de frijoles significa que puedes deshacerte de los grandes servidores caros;)
TomTom
2
Completamente de acuerdo. Al menos a los contadores de frijoles en el escenario de OP se les quitaron las garras del servidor físico (¡con suerte!)
Ali Razeghi
1
créelo. Yo no. TÍPICO sería un servidor con mucha RAM y discos baratos LAAAAARGE. Para que pueda ejecutar MUCHAS máquinas virtuales en ellos. Después de todo, la RAM es normalmente el factor limitante, ¿no es así? El resultado será un rendimiento de IOPS enorme, incluso sin una base de datos. He estado allí, visto eso. 64 GB de memoria, 2 TB refleja el disco SATA;)
TomTom
Gracias por la respuesta. Sospeché tanto, pero simplemente no tengo los datos para demostrar que el problema es parcialmente imitaciones de hardware. Estoy trabajando en eso ahora.
RMuesi
2
Es posible que desee informarles que SQL Server es un motor de base de datos en memoria. La lectura desde el disco, incluso los SSD (que estoy bastante seguro de que esta tienda no está utilizando) es muy lenta. Una lectura de RAM toma alrededor de 5ns. Muéstreles un plan de ejecución con SET STATISTICSIO ON que muestre escaneos y lecturas de tablas. Muéstreles las lecturas físicas frente a las lecturas lógicas. Lo físico se realiza desde el disco.
Ali Razeghi
-1

Estoy ejecutando 2008 R2 con 46 GB de RAM. No hay máquinas virtuales. SQL Server 2008.

Las bases de datos son de unos 300 GB.

Puse las bases de datos en una unidad de estado sólido recientemente y tripliqué mi salida de datos.

El servidor está utilizando actualmente 45 GB de RAM y funciona bien.

Raids FC Sata y Raids SAS SCSI. 26 unidades lógicas en total. 144 discos giratorios.

Ayer solo estaba usando 24 GB de RAM cuando solo tenía 50 TB de discos duros completos conectados y transfiriendo datos. Hoy tengo 160 TB de discos duros completos y estoy usando 45 GB de RAM.

Mi aplicación no usa más de 400 MB de RAM.

Sospecho que necesita las bases de datos en una unidad de estado sólido rápida o en una unidad ram. Básicamente, aunque necesitas mucho más ram.

david
fuente
IBM exFlash 400GB MCS $ 4400. Ahí es a donde voy.
David