Compre algum hardware, mas coloque-o no seu laboratório de teste, não no data center. Em seguida, enfatize sua aplicação em várias combinações de hardware / software até encontrar uma razoável que faça o que você deseja.
É claro que você precisará projetar algo que possa criar tráfego falso contra um banco de dados semelhante a uma produção executando uma cópia de teste do seu aplicativo. Mas quem disse que seria fácil.
Se você não fizer isso e simplesmente fizer alguma coisa na produção, você não tem idéia se vai funcionar ou não, e você pode ter gasto muito esforço de engenharia implementando coisas como caches (que virão com seu quinhão de bugs!) em algo que não ajuda.
Teste, teste e teste mais. Não lance mudanças de hardware / software em produção até obter bons dados de desempenho, mostrando que é provável que melhore significativamente os problemas. O esforço de engenharia é caro, o hardware de teste não é (particularmente).
Memcached é apenas uma opção, e você provavelmente não a considera até ter o cache do banco de dados funcionando de maneira ideal. Isso significa colocá-lo em uma caixa dedicada (64 bits, é claro) com uma quantidade razoável de RAM (não 4G - laptops têm isso hoje em dia; 32G é definitivamente acessível) e ajustá-lo apropriadamente.
Você não mencionou quão grande é o seu banco de dados, mas se for de todo possível, você vai querer tentar obtê-lo totalmente em memória RAM (ou pelo menos os bits quentes). Colocar seu banco de dados inteiramente no ram fará com que as operações de leitura e leitura desapareçam completamente e, portanto, deixem de ser um gargalo.
Faça o perfil de suas consultas ao banco de dados. Existem ferramentas para fazer isso - você deve ser capaz de simular a carga de produção em seu ambiente de teste. O truque é evitar consultas lentas e garantir que as executadas com frequência sejam rápidas.
Se seus problemas de desempenho estiverem relacionados a sincronizações de ES, porque você está fazendo muitas transações para o banco de dados, verifique se está usando um controlador de RAID com bateria que está se comportando corretamente (fale com o fornecedor sobre eles). Eles fornecem muito mais operações de gravação de E / S do que uma de backup sem bateria (porque os dados só precisam chegar ao cache antes que o sistema operacional receba a confirmação). Alternativamente, se seus dados não importam muito, considere relaxar os parâmetros de durabilidade do banco de dados (innodb sync on commit).