Polis Hyperlink Dicas e truques de Performance para JPA e EJB

25
core business solutions

Transcript of Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Page 1: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

core business solutions

Page 2: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Dicas e truques de performance em JPA e EJB

Danival Taffarel CalegariMATERA Systems

Page 3: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Sobre os palestrantes

Danival Taffarel CalegariMestre em Ciência da Computaç ão pela UNICAMP.

Trabalha com tecnologia Java EE desde 2002. Atua a mais de 4 anos com líder técnico na MATERA Systems.

Atua há mais de 5 anos como instrutor da Globalcode.

Palestras em eventos nacionais e internacionais: JustJava, TCD, JavaOne.

Participa do programa “Adopt a JSR” do SouJava (JSR 352).

Certificaç ões: SCJP, SCWCD, SCBCD.

Page 4: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Agenda

Introduç ão

Dicas de JPA

Dicas de EJB

Referências

Page 5: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Introduç ão

Performance é um requisito não funcional chave para conseguirmos os outros.Serve como “moeda” para “comprar” linguagens mais expressivas,

melhores interfaces com usuário, maior número de funcionalidades, frameworks genéricos, etc.

Influenciado pela escolha dos algoritmos, complexidade do problema, volume de dados manipulados.

Aspectos de programaç ão também tem grande impacto no desempenho da aplicaç ão.O uso de mecanismos inadequados ao problema pode prejudicar muito

a performance.

Demo: ordenaç ão de registro em arquivo.

Page 6: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Introduç ão

“ We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil”

Donald Knuth

Page 7: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Profiling

Dica: Realize mediç ões antes de fazer otimizaç ões.

Procure determinar os pontos de gargalo da aplicaç ão.Resolver um ponto crítico traz muito benefício com pouco esforç o.

Quando possível, utilize profilers.VisualVM que vem no JDK desde a versão 6 u7.

NetBeans Profiler.

Siga as três etapas abaixo:Intuiç ão.

Mediç ão.

Correç ão.

Page 8: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

JPA

Dica: Prefira usar consultas parametrizadas a concatenar o valor dos parâmetros no JPQL para permitir cache de consultas.

"select p from Payment p where p.customer.id="+custId

Como cada consulta tem um texto diferente, o cache de consultas não se torna eficiente.

"select p from Payment p where p.customer.id=:custId"

Esta soluç ão possui desempenho semelhante ao das NamedQuery no EclipseLink.

Page 9: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Estratégias para recuperar os objetos “do outro lado” de um relacionamento

Lazy: só recupera um dado quando necessário.

Eager: recupera o dado sempre.

Page 10: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Problema do N + 1

Page 11: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Dica: O JPA permite que a mudanç a de lazy para eager seja feita no JPQL.select distinct c from Categoria c join fetch c.produtos

Faz um único SELECT no banco de dados;

O join fetch resolve o problema do N+1;

Deve-se usar distinct para evitar replicaç ão de resultados;

Causa problemas com paginaç ão em banco de dados.

Page 12: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Page 13: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Dica: Procure fazer paginaç ão em banco de dados usando estraté gia lazy quando 1:N.Use os métodos setFirstResult e setMaxResults da Query.

O provedor JPA vai usar comandos nativos de banco de dados para limitar a consulta;

O uso de join fetch para relacionamentos 1:N provoca problemas de desempenho e de memó ria.

WARN: firstResult/maxResults specified with collection fetch; applying in memory!

Page 14: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

cat1

cat2

cat3

cat4

Page 15: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Lazy vs Eager

Dica: Procure usar eager quando sempre for processar todos os dados de uma vez.Uma situaç ão comum é geraç ão de relató rios.

Cuidado com o uso de memó ria;Faç a uma consulta prévia para recuperar somente os ids e faç a várias

consultas com in;

Chame o método clear do EntityManager para remover os objetos já utilizados da memó ria.

O Hibernate possui o recurso de “scroll” , onde ele mantém o ResultSet aberto e consulta um objeto por vez.

Page 16: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

First level cacheEnquanto o EntityManager estiver aberto, ele armazena os objetos

carregados por ele;

Este cache é apagado quando o método clear é chamado.

Second level cacheArmazena os objetos por EntityManagerFactory;

Cache “por aplicaç ão”.

Page 17: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

Page 18: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

Truque: Faç a uma carga pré via das entidades relacionadas no cache de primeiro nível antes da consulta principal.Consultas a objetos que possuem relacionamentos N:1 com entidades

com um número pequeno de instâncias.

Exemplo: Buscar produtos.Executar um “select c from Categoria c” antes da consulta por

produtos.

Recomendado em caso de entidades com complexidade de carga grande (pode-se usar join fetch).

Page 19: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

Page 20: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

Dica: Use cache de segundo nível para diminuir o consumo de memó ria e melhorar o desempenho.

Procure colocar entidades alteradas com pouca frequência;

Caso alguma aplicaç ão externa altere o banco de dados, os dados das entidades em cache de segundo nível ficam desatualizados.Procure colocar um tempo máximo de validade para os dados.

Page 21: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Cache

Dica: Use cache de resultado de consultas caso as consultas sejam feitas com um conjunto restrito de valores.

Não é um recurso padrão, mas grande parte dos providers JPA oferecem um recurso deste.

Armazena os ids dos objetos consultados vinculados com os parâmetros.Quando uma consulta é feita pelos mesmos parâmetros, já tem o

resultado pronto.

Cuidado com a política de exclusão de objetos do cache.Pode levar a problemas de consumo excessivo de memó ria.

Page 22: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

EJB

Dica: Evite transaç ões desnecessárias usando os atributos de propagaç ão de transaç ão apropriados.

Existem seis formas de propagaç ão de transaç ão:Required (default)

Requires New

Mandatory

Not Supported

Supports

Never

Caso o método não utilize recursos transacionais, coloque como “ Not Supported” ou mesmo “ Supports” para evitar iniciar transaç ões desnecessariamente.

Page 23: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

EJB

Dica: Reduza o custo de serializaç ão de desserializaç ão de objetos marcando atributos como transient.

Instâncias de Session Bean que são Stateful podem ser armazenados no disco e removidos da memó ria quando não estão em uso.

Passivation

Em chamadas remotas os objetos passados como parâmetro e retornados também passam por serializaç ão/desserializaç ão.

Procure deixar os atributos simples (evite árvores de objetos).

Sempre que possível, coloque os atributos como transientes (cuidado com valores nulos apó s a desserializaç ão).

Page 24: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Referências

Java PerformanceCharlie Hunt, Binu John. Prentice Hall. Outubro, 2011.

VisualVM Profilerhttp://visualvm.java.net

Apresentaç ão do JavaOne 2010http://www.slideshare.net/drspockbr/performance-tips-and-tricks-java-ee-

java-persistence-api-and-javaserver-faces

Curso: Introduç ão a Algorítmos MIT (Portal Veduca)http://www.veduca.com.br/play?v=381&t=0016%20&p=Algoritmos

Page 25: Polis Hyperlink Dicas e truques de Performance para JPA e EJB

Obrigado!

Danival Taffarel [email protected]

http://twitter.com/danivaltc