Cómo escalar esta aplicación de base de datos para manejar decenas de millones de registros

Realmente no está proporcionando suficiente información para hablar sobre la optimización de su aplicación o si podría haber cuellos de botella “innecesarios” que podrían eliminarse.

Además, no tengo claro cómo funcionan sus múltiples vServers juntos. ¿Tiene el servidor de la base de datos en uno de ellos y en los otros analizando datos y alimentando actualizaciones a la base de datos? ¿Está replicando la base de datos en los vServers?

Lo que podría sugerir es deshacerse de los vServers y obtener el servidor dedicado más robusto que pueda permitirse con mucha RAM y asegurarse de que los archivos de la base de datos estén en un SSD directamente conectado al servidor.

En cuanto a agregar índices, pueden mejorar el rendimiento del acceso de lectura en algunas circunstancias, pero ciertamente disminuirán significativamente el rendimiento de escritura. Muchas personas piensan que “agregar índices aumenta el rendimiento”, pero esto está lejos de ser universalmente cierto y, en su caso, los índices podrían ser parte del problema.

Primero debe asegurarse de cuál es el verdadero problema. ¿Qué es el cuello de botella?
Supongo que este es un problema de IO.
1. Decenas de millones de registros no es un gran número. Depende de su configuración de hardware.
2. No sé qué tipo de disco está utilizando. Si usa discos SSD, puede obtener varios miles de actualizaciones / inserciones por segundo. Es suficiente para sus cargas de trabajo.

Si es un cuello de botella de CPU. Debes optimizar tus consultas.
“Cada servidor actualiza alrededor de 50 entradas por minuto”.
Parece que tiene una mala estrategia de índice SQL o mala.