Como melhorar o desempenho do meu Sistema?

9 respostas
aorocha

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.

9 Respostas

ViniGodoy

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.
marcelo_emanoel

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:

andredeividi

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

vegetasw

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.

cv1

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.

bonfarj

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

abraços,

aorocha
mey hibernate.cdg.xml esta assim:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
    	<!-- ******************************************************
							CONFIGURAÇÕES DO BANCO DE DADOS
	*********************************************************** -->
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>

        <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>
</hibernate-configuration>
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?

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?

aorocha

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?

Resp. Postgre

Criado 29 de março de 2007
Ultima resposta 30 de mar. de 2007
Respostas 9
Participantes 8