Como melhorar o desempenho do meu Sistema?

No começo era rapinho, agora comk muitos acessos simultaneos e muitos registro no bd, ficou muito lento e o pessoal começou a reclamar, o que eu poderia usar para melhorar?

Uso java 5 Hibernate 3 e tomcat.

Qualquer sugestão será bem vinda.

Primeiro de tudo, use um profiler para ver onde está o problema de performance.

No caso de BD:

  1. Evite fazer/desfazer conexões com o banco;
  2. Use caches para não carregar os mesmos objetos repetidas vezes;
  3. Procure como otimizar consultas usando o hibernate.

Já tentou fazer profiling?

provavelmente como vc citou que no começo era rápido e depois que foram inseridos vários registros no banco… talvez vc esteja com alguma consulta fazendo coisas que não deveria… ou talvez algum algoritmo não muito legal… tudo isso depende muito… e vc só vai saber realmente o que está acontecendo quando tiver instrumentação pra isso… isso signigfica que você vai precisar “perder” algum tempinho coletando dados… até que td esteja mais claro e vc saiba em que ponto o sistema está falho…

Uma sugestão caso vc ainda não esteja usando é controle de paginação…
o banco retorna menos resultados e a resposta eh bem mais rápida :slight_smile:
hibernate tem suporte a paginação…

Enfim… ta dada a dica :slight_smile:

Existem n maneiras de melhorar o desempenho de um sistema.

eu começaria analizando as suas consultas no banco de dandos
como esta os indeces, se exciste alguma busca sequencial. etc.

no mais nossos amigos ja mencionaram.

Abraço

Você faz relacionamentos entre ORMs no uso do Hibernate?
Se sim, verifique os relacionamentos entre eles, dependendo de como está, o Hibernate pode estar trazendo informações a mais nas buscas.

Alem de tudo isso (e talvez antes de tudo isso), ja olhou os indices do seu banco? Arrume um DBA competente pra dar uma olhada na sua aplicacao.

Você está usando qual pool de conexões? Faz uso de lazy loading? Fale mais da sua aplicação.

abraços,

mey hibernate.cdg.xml esta assim:[code]<?xml version="1.0" encoding="UTF-8"?>

org.postgresql.Driver
    <property name="hibernate.connection.username">requisicao</property>
    <property name="hibernate.connection.password">141296</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/requisicao2?charSet=LATIN1</property>


    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
	<property name="hibernate.connection.lc_ctype">LATIN1</property>
	<property name="hibernate.connection.charSet">LATIN1</property>
	<property name="hibernate.show.sql">false</property>

	<!-- ******************************************************
						CONFIGURAÇÕES DO POOL C3P0
	*********************************************************** -->
	<property name="c3p0.acquire_increment">1</property>
	<property name="c3p0.max_size">30</property>
	<property name="c3p0.max_statements">0</property>
	<property name="c3p0.min_size">5</property>
	<property name="c3p0.timeout">100</property> <!-- seconds -->
	<property name="c3p0.idle_test_period">100</property><!--  seconds -->



</session-factory>

[/code]

estou usando anotações do hibernate então os relacionamento nos meus pojos ficam assim:

@ManyToOne(cascade = {}, fetch = FetchType.LAZY) @JoinColumn(name = "idpax", unique = false, nullable = false, insertable = true, updatable = true) public Usuariorequisicao getUsuariorequisicaoByIdpax() { return this.usuariorequisicaoByIdpax; }

Como que faço para usar Cache do Hibernate?

Problemas de performance associadas a sistemas que cresceram muito a base de dados normalmente está associado a mau uso do banco. Se for realmente crítico contrate um DBA (que sabe o que faz). Por exemplo, tenha cuidado com os campos de joins e com os filtros mais usados.

Se uma tabela é grande (muitos registros) e um determinado campo é sempre usado para filtro, então tá na hora de pensar em colocar um índice nesse campo. Mesma coisa para um campo que é sempre usado para joins. Só não vai pegar uma tabela de 20 colunas e colocar índice para todos os campos, porque a cada inclusão, o BD vai ter que tratar de modificar cada um dos índices. Cuidado também com joins de 2 tabelas grandes.

Só para saber, qual o bd?

[quote=otaviofcs]Problemas de performance associadas a sistemas que cresceram muito a base de dados normalmente está associado a mau uso do banco. Se for realmente crítico contrate um DBA (que sabe o que faz). Por exemplo, tenha cuidado com os campos de joins e com os filtros mais usados.

Se uma tabela é grande (muitos registros) e um determinado campo é sempre usado para filtro, então tá na hora de pensar em colocar um índice nesse campo. Mesma coisa para um campo que é sempre usado para joins. Só não vai pegar uma tabela de 20 colunas e colocar índice para todos os campos, porque a cada inclusão, o BD vai ter que tratar de modificar cada um dos índices. Cuidado também com joins de 2 tabelas grandes.

Só para saber, qual o bd?[/quote]

Resp. Postgre