Esta es una pregunta canónica sobre la planificación de capacidad para bases de datos.
Relacionado:
Estoy buscando crear una pregunta canónica de herramientas y métodos de planificación de capacidad para bases de datos. Esta pretende ser una pregunta canónica.
Obviamente, el flujo de trabajo general es:
- Pon tu escenario en su lugar
- Agregar monitoreo
- Agregar tráfico
- Evaluar resultados
- Remediación basada en resultados
- Enjuague, repita hasta que esté razonablemente feliz
Siéntase libre de describir diferentes herramientas y técnicas para diferentes servidores web, marcos, etc., así como las mejores prácticas.
Respuestas:
Planificación de capacidad de disco y RAM
La planificación de la capacidad de disco y memoria para un servidor de base de datos es un arte negro. Más es mejor. Más rápido es mejor.Como pautas generales ofrezco lo siguiente:
Tome su mejor cálculo de cuánto espacio en disco necesitará para los próximos 3-5 años, luego duplíquelo.
El tamaño del índice dependerá de su base de datos, y todo lo demás depende en gran medida de su conjunto de datos y estructura de consulta / base de datos. Ofreceré "Al menos el doble del tamaño de su tabla más grande" como sugerencia, pero tenga en cuenta que esta sugerencia se desglosa en operaciones de almacenamiento de datos realmente grandes donde la tabla más grande puede ser decenas o cientos de gigabytes.
Todos los proveedores de bases de datos tienen algunas instrucciones sobre cómo ajustar el rendimiento de su disco / memoria / núcleo del sistema operativo: dedique algún tiempo a esta documentación antes de la implementación. Ayudará.
Benchmarking de carga de trabajo y planificación de capacidad
Suponiendo que aún no se haya desplegado ...
Muchos sistemas de bases de datos se envían con herramientas de evaluación comparativa: por ejemplo, PostgreSQL se envía con pgBench .Estas herramientas deberían ser su primera parada en la evaluación comparativa del rendimiento de la base de datos. Si es posible, debe ejecutarlos en todos los nuevos servidores de bases de datos para tener una idea de "cuánto trabajo" puede hacer el servidor de bases de datos.
Armado ahora con un punto de referencia sin procesar
ABSOLUTELY MEANINGLESS
, consideremos un enfoque más realista para la evaluación comparativa: cargue el esquema de su base de datos y escriba un programa que lo complete con datos ficticios, luego ejecute las consultas de su aplicación contra esos datos.Esto compara tres cosas importantes: 1. El servidor de la base de datos (hardware) 2. El servidor de la base de datos (software) 3. El diseño de su base de datos y cómo interactúa con (1) y (2) anteriores.
Tenga en cuenta que esto requiere mucho más esfuerzo que simples puntos de referencia preconstruidos como
pgBench
: necesita escribir algún código para completar la información, y puede que necesite escribir algo de código para hacer las consultas e informar el tiempo de ejecución.Este tipo de prueba también es sustancialmente más precisa: dado que está trabajando con su esquema y consultas, puede ver cómo funcionarán y le ofrece la oportunidad de perfilar y mejorar su base de datos / consultas.
Los resultados de estos puntos de referencia son una vista idealizada de su base de datos. Para estar seguro, suponga que solo alcanzará el 50-70% de este rendimiento en su entorno de producción (el resto es un colchón que le permitirá manejar un crecimiento inesperado, fallas de hardware, cambios en la carga de trabajo, etc.).
¡Es demasiado tarde! ¡Está en producción!
Una vez que sus sistemas están en producción, es realmente demasiado tarde para "comparar": puede activar brevemente el registro / sincronización de consultas y ver cuánto tiempo demoran las cosas en ejecutarse, y puede ejecutar algunas consultas de "prueba de esfuerzo" en grandes conjuntos de datos durante el apagado horas También puede ver la utilización de la CPU, RAM y E / S (ancho de banda del disco) del sistema para tener una idea de qué tan cargada está.
Desafortunadamente, todas estas cosas harán una idea de lo que está haciendo el sistema y un concepto vago de cuán cerca está de la saturación.
Eso nos lleva a ...
Monitoreo continuo
Todos los puntos de referencia en el mundo no lo ayudarán si su sistema de repente ve patrones de uso nuevos / diferentes.
Para mejores o peores, las implementaciones de bases de datos no son estáticas: sus desarrolladores cambiarán las cosas, su conjunto de datos crecerá (parece que nunca se reducen) y sus usuarios crearán de alguna manera combinaciones locas de eventos que nunca predijo en las pruebas.
Para planificar adecuadamente la capacidad de su base de datos, necesitará implementar algún tipo de monitoreo de rendimiento para alertarlo cuando el rendimiento de la base de datos ya no cumpla con sus expectativas. En ese momento, puede considerar acciones correctivas (nuevo hardware, esquema de base de datos o cambios de consulta para optimizar el uso de recursos, etc.).
fuente
Generalmente necesita casos de uso realistas para probar el rendimiento. Una práctica recomendada es involucrar a los desarrolladores de aplicaciones y usuarios finales.
Registre lo que suelen hacer, parametrícelo (contenido, número de acciones concurrentes) para cada caso de uso.
Luego construya el lado del cliente. Una sola máquina física a menudo no es suficiente para aumentar la carga de producción.
Luego enciéndalo, calcule, mejore y pruebe nuevamente.
Te sorprenderá dónde surgen los cuellos de botella.
fuente