Servidor para bases de datos: cómo calcular memoria, disco y CPU
En pocas palabras
Una base de datos va rápido cuando los datos y los índices que se consultan seguido entran en memoria: ahí las lecturas no tocan el disco. Por eso el primer número a calcular es cuánto pesa esa parte "caliente", y el segundo, cuánta RAM le podés dar al motor: en MySQL y MariaDB, entre la mitad y tres cuartos del total en un servidor dedicado; en PostgreSQL, alrededor de un cuarto, porque se apoya en la caché del sistema. Después vienen el disco, donde pesan la latencia y el RAID antes que la capacidad, los núcleos según la concurrencia y la red, donde la latencia importa más que el ancho de banda.
Primero medí cuánto pesa lo que se consulta
Todo el dimensionamiento sale de un dato: cuánto ocupan las tablas y los índices que se leen seguido. Si entran en la memoria del motor, las lecturas se resuelven sin tocar el disco; si no entran, cada consulta que no encuentra lo suyo en memoria espera al disco, y la diferencia se mide en órdenes de magnitud.
El tamaño por base sale de la primera consulta de abajo. La segunda, en MySQL y MariaDB, compara las lecturas que el motor resolvió en memoria (read_requests) con las que tuvo que ir a buscar al disco (reads). Si de forma sostenida más de una de cada cien va al disco, la memoria queda corta. En PostgreSQL, la misma relación sale de las columnas blks_hit y blks_read de pg_stat_database.
SELECT table_schema AS base,
ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY mb DESC;
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';Cuánta memoria darle al motor
Los motores reparten la memoria de forma distinta. InnoDB, el de MySQL y MariaDB, quiere tener su propia caché grande; PostgreSQL se apoya mucho más en la caché de archivos del sistema operativo, y por eso su número es más bajo.
| Motor | Parámetro | Punto de partida en un servidor dedicado a la base |
|---|---|---|
| MySQL y MariaDB | innodb_buffer_pool_size | Entre el 50 y el 75 % de la RAM |
| PostgreSQL | shared_buffers | Alrededor del 25 % de la RAM |
| PostgreSQL | effective_cache_size | Entre el 50 y el 75 %: no reserva nada, le avisa al planificador cuánta caché del sistema hay |
| Los tres | Memoria por conexión (sort_buffer_size, work_mem) | Valores chicos: se multiplican por cada conexión y cada operación |
La memoria que queda fuera del motor no se desperdicia: la usan el sistema, las conexiones y la caché de archivos. Pasarse obliga a usar swap, y una base en swap anda peor que una con menos caché.
El disco: latencia antes que capacidad
Una base no lee archivos de corrido: salta de una página a otra y, en cada transacción confirmada, espera a que el registro quede escrito en disco. Lo que importa es cuánto tarda cada operación chica, no cuántos megabytes por segundo se pueden copiar. Un SSD resuelve una lectura aleatoria en décimas de milisegundo; un disco mecánico, en varios milisegundos.
La forma del arreglo también cuenta. RAID 10 es el estándar para bases de datos porque escribe sin el cálculo de paridad que frena a RAID 5 y 6, y sigue funcionando si falla un disco. Los servidores cloud de InHosting usan RAID 10 con un disco de reserva que entra en el arreglo apenas otro falla. Entre sus dos opciones, 240 GB SSD o 1 TB SAS, una base transaccional con mucha escritura va mejor en SSD; el volumen grande conviene cuando la prioridad es el espacio y lo caliente entra en memoria.
Dejá margen: al menos el doble de lo que ocupa hoy la base. Un ALTER TABLE sobre una tabla grande puede necesitar por un rato tanto espacio libre como la tabla, y los volcados también ocupan lugar.
Núcleos: cuentan las consultas simultáneas
En MySQL y MariaDB cada consulta corre en un solo hilo. Más núcleos significan más consultas a la vez, no que una consulta pesada termine antes: un reporte lento en un servidor de 8 núcleos tarda casi lo mismo que en uno de 4. PostgreSQL puede repartir algunas consultas grandes entre varios núcleos, pero el criterio general se mantiene.
Para estimar, mirá cuántas consultas corren a la vez en el pico con SHOW GLOBAL STATUS LIKE 'Threads_running';. Si ese número supera seguido la cantidad de núcleos, hay cola. Los servidores cloud de InHosting vienen con 4 u 8 núcleos, y la memoria se amplía hasta 128 GB sin cambiar de equipo.
La red entre la aplicación y la base
Cuando la base se separa del servidor web, cada consulta suma un viaje de ida y vuelta por la red. Una página de una tienda puede hacer 80 consultas. Con 0,2 milisegundos por viaje, dentro del mismo datacenter, son 16 milisegundos; con 20 milisegundos, entre ciudades o por internet, son 1,6 segundos antes de que se dibuje nada.
Por eso la base va cerca de la aplicación y por una red privada: los servidores cloud de InHosting pueden conectarse entre sí por red privada dentro del mismo datacenter. De paso, el puerto de la base no queda expuesto a internet.
Lo que rinde más que cualquier ampliación
Antes de sumar hardware, pasá una semana mirando qué consultas tardan. Activar el registro de consultas lentas no requiere reiniciar el motor:
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;- Pasá las peores por
EXPLAIN: si recorre la tabla entera, falta un índice en las columnas del WHERE, del JOIN o del ORDER BY. - Pedí solo las columnas que usás. Un SELECT de todo sobre una tabla ancha mueve datos que nadie mira.
- Agrupá las escrituras en transacciones en lugar de confirmar fila por fila.
- Mové a tablas de archivo los datos históricos que casi no se consultan.
- Si la aplicación abre y cierra conexiones sin parar, poné un pool delante: ProxySQL para MySQL y MariaDB, PgBouncer para PostgreSQL.
Respaldo y réplica: se complementan
- Una réplica copia cada cambio en segundos, incluido un DELETE sin WHERE. Te salva de una falla de hardware, no de un error humano.
- Un volcado lógico consistente, sin frenar la base, sale con
mysqldump --single-transactionen InnoDB o conpg_dumpen PostgreSQL. - Para bases grandes, las copias físicas son más rápidas:
mariadb-backup, Percona XtraBackup opg_basebackup. - Con los registros binarios de MySQL o el WAL de PostgreSQL se puede volver a un minuto exacto, por ejemplo al instante anterior a un borrado.
- En un servidor cloud el respaldo lo organizás vos, y tiene que quedar en otro equipo: una copia en el mismo disco se pierde con él. Qué hacer si falla el servidor entero está en plan de continuidad para pymes.
Cuándo separar la base y cuándo no
| Separala si | Dejala junto a la web si |
|---|---|
| La base y PHP se pelean por el procesador en los picos | El volumen es chico o mediano y el servidor anda holgado |
| Querés sumar servidores web sin duplicar la base | Hay un solo servidor web y no se prevén más |
| Necesitás ajustar el sistema para la base sin afectar lo demás | La latencia importa más que el aislamiento |
| Querés que la base no tenga ningún puerto hacia internet | Preferís una sola máquina para administrar y respaldar |
| Plan | Incluye | Por mes |
|---|---|---|
| Servidor SH1 | 4 núcleos · 4 GB de RAM · RAID 10 | Sin stock |
| Servidor SH2 | 4 núcleos · 6 GB de RAM · RAID 10 | $ 87.458US$ 58,50 |
| Servidor SH3 | 4 núcleos · 8 GB de RAM · RAID 10 | $ 94.185US$ 63 |
| Servidor SH4 | 8 núcleos · 8 GB de RAM · RAID 10 | $ 100.913US$ 67,50 |
| Servidor SH5 | 8 núcleos · 16 GB de RAM · RAID 10 | $ 107.640US$ 72 |
| Servidor SH6 | 8 núcleos · 32 GB de RAM · RAID 10 | $ 114.368US$ 76,50 |
Con el 10 % de descuento del código INH, que ya va en los enlaces de contratación. Los precios se leen de la tienda. Ver el detalle de cada plan.
Preguntas frecuentes
¿Un VPS alcanza para una base de datos?
Para bases chicas y medianas, sí. Los Cloud VPS de InHosting tienen de 1 a 4 GB de RAM, con recursos garantizados y no sobrevendidos. Cuando la parte caliente de la base ya no entra cómoda en esa memoria, o la escritura es intensa, conviene un servidor cloud.
¿Qué pasa si le asigno al motor más memoria de la que hay?
El sistema empieza a usar swap y todo se vuelve lento, o el kernel se queda sin memoria y cierra el proceso más grande, que suele ser el propio motor. Por eso el número se calcula dejando lugar para el sistema y las conexiones.
¿Qué conviene primero, más RAM o un disco más rápido?
Si la parte caliente no entra en memoria, RAM: elimina lecturas de disco en lugar de hacerlas más rápidas. Si ya entra y el cuello está en las escrituras, disco. Las mediciones de la primera sección te dicen cuál de las dos.
¿MySQL, MariaDB o PostgreSQL?
El que soporte tu aplicación. WordPress, WooCommerce y la mayoría de los sistemas en PHP usan MySQL o MariaDB. PostgreSQL se luce en consultas complejas, datos geográficos y cargas analíticas. Cambiar de motor por rendimiento rara vez rinde tanto como un índice bien puesto.
Seguí leyendo
Alta disponibilidad: qué hace falta y cuánto cuesta cada nivel
Qué significa cada nivel de disponibilidad en minutos de corte, qué hay que duplicar para alcanzarlo y cómo calcular si el escalón siguiente te conviene.
6 min de lectura
VPS o servidor dedicado: cómo saber cuándo hace falta el salto
Señales concretas de que un VPS ya no alcanza, cómo confirmarlas con tres comandos y qué gana y qué no gana tu proyecto con hardware exclusivo.
6 min de lectura
Migrar de un servidor viejo a uno nuevo con minutos de corte
Cómo pasar producción de un servidor viejo a uno nuevo con réplica y sincronización, sin apagar y copiar: inventario, rsync, base de datos, DNS y corte.
7 min de lectura
