Performance do banco postgres comprometida

Boa tarde amigos, estou trabalhando em uma aplicacao que possui um server em C++ que grava dados vindo de sensores num banco de dados postgresql, este mesmo banco alimenta uma interface grafica feita em java JSF. Eis o meu problema : quando o server está de pe alimentando o banco a aplicacao java fica super lenta, com a usabilidade bastante comprometida, ai é questão de matar o server que a aplicacao java volta ao normal com sua performance devida, o volume de dados no banco é um pouco grande, na casa de meio milhao de registros por semana sao inseridos no banco 24h por dia mas mesmo com o banco com seus 3 milhoes de registros, quando o server é desabilitado a aplicacao java volta a funcionar normalmente, alguem poderia me ajudar a enchergar um ponto de partida p/ resolver o meu problema? grato

Mas o banco esta rodando no mesmo servidor que o Java ?

1.Talves tenha chegado a hora de rever o hardware ou pensar em uma solucao NoSQL com distribuicao de processamento.
Chega uma hora que banco de dado relacional pode nao ser mais a melhor opcao.

2.Em relacao ao Java
2.1 Pensar em modularizar
2.2 Pensar em trocar a JVM do Hospot pela Open-J9 (diminui o tamanho da JVM)
2.3 Ou usar GraalVM (www.graalvm.org) para gerar nativo, o programa ficara minusculo, o Twitter usa essa solucao.

o banco roda na mesma maquina fisica do java, mas em servidores diferentes, a maquina é um server com várias outras maquinas virtuais, uma para o banco, outra para o server e outra com um glassfish 4 que roda a aplicaçao java.

O sistema em java é pequeno e ja está modularizado, a maquina do java o load dela é minusculo, não tenho problemas com a aplicação java em si, o que acontece é que o acesso ao banco fica super lento quando o server está gravando as infos.

Pensei em sugerir o NOSQL p/ meus superiores, mas são pessoas mais conservadores e fechadas de tecnologia e a esta altura do projeto(entregar semana que vem) acho que vai ser inviavel.

Eu acho estranho pq é exatamente assim que o programa deveria se comportar, dois sistemas gravando e acessando um banco pode ser tão pesado assim p/ um postgresql? eu já trabalhei em outra empresa com soluções Oracle e tinhamos bancos com dezenas de milhões de registros e não tinhamos este problema, na propria empreza eles tem sistemas em oracle que possuem muito mais registros que este, utilizando a mesma arquitetura (Um server em c++ que faz operações e uma interface em java que consome estes dados).

Obrigado pelo seu tempo.

Uma alternativa é ter um espelhamento de base, ou seja, uma base de dados master e uma réplica, o acesso a master você deixa para as aplicações que gravam registros, e as aplicações que consomem informações você direciona para a base réplica.
Não tenho certeza se existe recurso disponível para isso em on-premise, em cloud eu sei que existe pq já utilizei este tipo de recurso, isso dá uma boa desafogada nestes problemas que tu tá tendo.

Veja se alguma dessas dicas melhoram o desempenho

http://www.help.market.com.br/desenvolvimento/performance.htm