Pool Conexão MySQL x Provedor de Hospedagem

Estou com um problema com um provedor de hospedagem e meu sistema desenvolvido em Java (JSP).
Gostaria de saber a opinião de vocês o que pode ser.

Tenho instalado em minha máquina um Windows XP, Tomcat 6 e JDK 1.5 e MySQL 5. Quando rodo minha aplicação funciona corretamente, utilizando pool de conexão. As conexões são abertas e fechadas corretamente utilizando no máximo 2 ou 3 conexões. E muito rapidamente.

Agora, quando envio a aplicação para o servidor de hospedagem em Linux, Tomcat 6, JDK 1.6 e MySQL 5 as portas de conexão nãos estão fechando.

Isto pode ser alguma configuração do MySQL neste provedor onde esteja estourando alguma configuração com limitações do usuário?

Utilizo o conceito de DAO, por isto, quando minha aplicação necessita de uma informação abre a conexão, obtem o dado e fecha a conexão.
Com isto, se necessitar de 10 informações em tabelas diferentes, terei 10 solicitações de aberturas e fechamentos de conexões. Mas como utilizo pool de conexão, teoriamente não teria problema.

Teoricamente…, pois isto não funciona no provedor de hospedagem.

Quando questionei sobre a utilização de pool de conexão com o provedor eles me deram a resposta abaixo.

“Nao recomendamos o pool de conexao por ele utilizar recursos desnecessarios do servidor de banco de dados. Sugerimos aos clientes que abram uma conexao quando necessario e fechem quando nao for mais necessaria a mesma.
A diferença de velocidade entre utilizar o pool e abrir uma nova conexao, em ambiente web, é irrisória.”

Por isto suspeito de alguma configuração do MySQL. Alguém tem alguma ideia do que possa ser?

pode ser que o mysql faça isso mesmo. bloqueie muitas conexões.

tente pegar as variáveis do mysql e verificar as configurações.

eu particularmente utilizo uma conexão standalone

Alguma variável específica, para que eu possa verificar com o provedor de hospedagem?

não to lembrando direito, mas procura por alguma coisa do tipo connection, max_connections

da uma olhada na documentação do mysql tb.

vlw

Parece que o pessoal do serviço de hospedagem que você contratou:
a) Não sabe do que está falando
b) Não quer permitir que você utilize recursos do banco que na verdade você está pagando.

Dizer que a diferença de velocidade é irrisória só é válido para um volume de acesso bem pequeno… qualquer aplicação grande, que tenha muitos acessos, tem seu desempenho significativamente melhorado com a utilização de um pool de conexões.

Cassio,

Concordo com o que comentou sobre o provedor.
Isto foi enviado pelo pessoal do suporte técnico do KingHost.
Faz pouco tempo que estão trabalhando com java e neste caso não devem conhecer a diferença de performance entre a utilização de um pool de conexão e acesso direto, visto que o processo de conexão ao banco de dados ser muito custoso para a aplicação.
Mas vou solicitar a configuração deles e ver o que posso negociar.
Só espero que não sejam como o outro provedor onde estava minha aplicação, pois simplemente disseram que eu não poderia criar views no banco de dados pois abre brecha na segurança no MySQL.

[quote=liesse]Cassio,

Concordo com o que comentou sobre o provedor.
Isto foi enviado pelo pessoal do suporte técnico do KingHost.
Faz pouco tempo que estão trabalhando com java e neste caso não devem conhecer a diferença de performance entre a utilização de um pool de conexão e acesso direto, visto que o processo de conexão ao banco de dados ser muito custoso para a aplicação.
Mas vou solicitar a configuração deles e ver o que posso negociar.
Só espero que não sejam como o outro provedor onde estava minha aplicação, pois simplemente disseram que eu não poderia criar views no banco de dados pois abre brecha na segurança no MySQL.[/quote]

Eles não trabalham com PostgreSQL?

Minha aplicação está em MySQL e deve funcionar também com SQL*Server e Oracle (com pequenos ajustes), mas não testei com o PostGreSQL.
Existe diferença de comandos?

Qual a vantagem sobre o MySQL?

Olha, a grande maioria dos projetos que eu fiz até hoje com banco de dados utilizou o PostgreSQL. Eu no tenho amplos conhecimentos sobre o MySQL mas utilizei pool de conexões com o PostgreSQL em todos os projetos que realizei até hoje e nunca tive problemas de segurança. Na verdade duvido um pouco que esse tipo de problema ocorra até mesmo com o MySQL, pois já vi dezenas de exemplos de connection pooling usando o MySQL, tanto para JDBC puro como para Hibernate.
Alguns comandos são sim um pouco diferentes, mas as operações básicas não mudam muito não. O trabalho que você teria seria até menor do que migrar para Oracle, IMHO. Mas aconselho que você veja direito esse lance sobre segurança no MySQL para connection pooling. Achei essa informação bastante duvidosa…

Com certeza problema não é o MySQL, mas com os procedimentos internos do provedor onde o suporte técnico não consegue ou não quer responder corretamente o problema.
Aí nestes casos saem estas “pérolas” de respostas do suporte.

Mas vou pesquisar o PostGreSQL também, pois já ouvi falar bem e talvez seja mais rápido, apesar que o MySQL me supreendeu. Trabalho com Oracle e não esperava uma performance assim dele.

Tente contratar um serviço de host dedicado, ou uma VPS. Existem VPS com preços bem camaradas por ai no mercado, por exemplo o RoseHosting.

A vantagem de usar uma VPS é que você é “dono” da máquina (usuário root) e pode configura-la da maneira que necessitar, sem precisar ficar “implorando” no HelpDesk.

A parte ruim é que você vai ter que configurar tudo por si mesmo.

O problema do VPS é o que você comentou, tem de ser configurado por nós mesmo.
Apesar da configuração estar como desejado, o tempo e conhecimento necessário impede a agilidade.

O host dedicado é uma boa alternativa para o futuro, mas na fase atual do projeto não compensa o custo x benefício apesar de ser pequeno.
Por enquanto é só para servir como demonstração a clientes.

A solução atual é brigar por enquanto com os HelpDesks ou achar uma melhor alternativa de hospedagem.

Mais uma observação, gostei do exemplo da caixa d’agua.