Aplicação web concorrente

5 respostas
maresp

Estou com um problema de concorrência com uma aplicação. Nela tenho um método sincronizado que é executado n (1 até 14) vezes. Este método faz um select para gerar uma chave primária e depois um insert. Posso estar gerando um “gargalo” na minha aplicação com isso? Não estou utilizando pool de conexões (dbcp), ou seja, cada request faz uma conexão com o banco de dados.

5 Respostas

danieldestro

Com certeza é um gargalo do sistema…
Você pode clocar esse processo como uma thread separada, que tal?

maresp

como poderia fazer isso daniel? Tem alguma sugestão?

danieldestro

Na verdade responda a si mesmo primeiramente.
Qual a necessidade do método ser sincronizado?
(pode responder aqui pra mim tbm, tá… hehehehe)

maresp

O método é synchronized por eu estar gerando pk´s com ele. Acabei fazendo a alteração deixando a geração para o db fazer. Mas isso não resolveu meu problema, ainda tinha lentidão de acessos, era um caos. Estou utilizando o PostgreSQL e percebí que havia problemas. Como trabalho numa universidade as coisas são bem diferentes de uma empresa de desenvolvimento de software, sabe como é, os papeis não são muito definidos. Tive que me meter a DBA. Primeiro verifiquei que a versão do Postgre era a 7.2.x (atual é 7.3.4). Baixei a nova, compilei e instalei. Aí vem a pior parte, fazer uma sintonia fina para obter o melhor em termos de performance do db. O dia começou hoje, e a diferença é gritante. Resumindo, não sei até que ponto a alteração que efetuei em minha classe surtiu algum efeito, mas com certeza não foi mais do que 10% do que ganhei em performance.
Consultorias em PostgreSQL por favor me ligem… brincadeira, espero nunca mais precisar me afundar no submundo dos databases.

danieldestro

Você pode evitar de usar o método todo sincronizado e fazer apenas a parte de geracao da PK insercao sincronizados.

public void seuMetodo( ) {
  // faz algo ...

  synchronized( this ) {
    // gera sua PK
    // insere no DB
  }

  // faz mais algo
}
Criado 7 de novembro de 2003
Ultima resposta 10 de nov. de 2003
Respostas 5
Participantes 2