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!
Respuestas:
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.
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 .
No lo dijo, pero si estos se ejecutan en el mismo cuadro, los requisitos de memoria para ellos también deben tenerse en cuenta.
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.
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_XX
el 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.
fuente
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.
fuente
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.
fuente