core business solutions
Dicas e truques de performance em            JPA e EJB          Danival Taffarel Calegari             MATERA Systems
Sobre os palestrantes Danival Taffarel Calegari    Mestre em Ciê                ncia da Computaç ã pela UNICAMP.          ...
AgendaIntroduç ãoDicas de JPADicas de EJBReferê     ncias
Introduç ão Performance é um requisito nã funcional chave para                              o   conseguirmos os outros.   ...
Introduç ão “ We should forget about small efficiencies, say about 97% of   the time: premature optimization is the root o...
Profiling Dica: Realize mediç õ antes de fazer otimizaç õ                      es                        es. Procure deter...
JPADica: Prefira usar consultas parametrizadas a  concatenar o valor dos parâ metros no JPQL para  permitir cache de consu...
Lazy vs Eager Estraté gias para recuperar os objetos “do outro lado” de um   relacionamento Lazy: só recupera um dado quan...
Lazy vs EagerProblema do N + 1
Lazy vs Eager Dica: O JPA permite que a mudanç a de lazy para   eager seja feita no JPQL.    select distinct c from Catego...
Lazy vs Eager
Lazy vs Eager Dica: Procure fazer paginaç ão em banco de dados   usando estraté gia lazy quando 1:N.   Use os mé todos set...
Lazy vs Eager                cat1                cat2                cat3                cat4
Lazy vs Eager Dica: Procure usar eager quando sempre for processar   todos os dados de uma vez.    Uma situaç ã comum é ge...
CacheFirst level cache   Enquanto o EntityManager estiver aberto, ele armazena os objetos     carregados por ele;   Este c...
Cache
CacheTruque: Faç a uma carga pré via das entidades  relacionadas no cache de primeiro nível antes da  consulta principal. ...
Cache
CacheDica: Use cache de segundo nível para diminuir o  consumo de memó ria e melhorar o desempenho.Procure colocar entidad...
CacheDica: Use cache de resultado de consultas caso as  consultas sejam feitas com um conjunto restrito de  valores.Nã é u...
EJBDica: Evite transaç õ desnecessárias usando os                     es  atributos de propagaç ão de transaç ão apropriad...
EJBDica: Reduza o custo de serializaç ão de  desserializaç ão de objetos marcando atributos como  transient.Instâ    ncias...
Referências Java Performance Charlie Hunt, Binu John. Prentice Hall. Outubro, 2011. VisualVM Profiler http://visualvm.java...
Obrigado! Danival Taffarel Calegaridanival.calegari@matera.com http://twitter.com/danivaltc
Próximos SlideShares
Carregando em…5
×

Polis Hyperlink Dicas e truques de Performance para JPA e EJB

767 visualizações

Publicada em

Publicada em: Dispositivos e hardware
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
767
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
14
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Polis Hyperlink Dicas e truques de Performance para JPA e EJB

  1. 1. core business solutions
  2. 2. Dicas e truques de performance em JPA e EJB Danival Taffarel Calegari MATERA Systems
  3. 3. Sobre os palestrantes Danival Taffarel Calegari Mestre em Ciê ncia da Computaç ã pela UNICAMP. o 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ç õ SCJP, SCWCD, SCBCD. es:
  4. 4. AgendaIntroduç ãoDicas de JPADicas de EJBReferê ncias
  5. 5. Introduç ão Performance é um requisito nã funcional chave para o conseguirmos os outros. Serve como “moeda” para “comprar” linguagens mais expressivas, melhores interfaces com usuá maior nú rio, mero de funcionalidades, frameworks gené ricos, etc. Influenciado pela escolha dos algoritmos, complexidade do problema, volume de dados manipulados. Aspectos de programaç ã també m tem grande impacto no o desempenho da aplicaç ão. O uso de mecanismos inadequados ao problema pode prejudicar muito a performance. Demo: ordenaç ã de registro em arquivo. o
  6. 6. Introduç ão “ We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil” Donald Knuth
  7. 7. Profiling Dica: Realize mediç õ antes de fazer otimizaç õ es 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ã 6 u7. o NetBeans Profiler. Siga as trê etapas abaixo: s Intuiç ão. Mediç ão. Correç ão.
  8. 8. JPADica: 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="+custIdComo cada consulta tem um texto diferente, o cache de consultas nã se torna eficiente. o"select p from Payment p where p.customer.id=:custId"Esta soluç ã possui desempenho semelhante ao das o NamedQuery no EclipseLink.
  9. 9. 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.
  10. 10. Lazy vs EagerProblema do N + 1
  11. 11. 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ç ã de resultados; o Causa problemas com paginaç ã em banco de dados. o
  12. 12. Lazy vs Eager
  13. 13. 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!
  14. 14. Lazy vs Eager cat1 cat2 cat3 cat4
  15. 15. Lazy vs Eager Dica: Procure usar eager quando sempre for processar todos os dados de uma vez. Uma situaç ã comum é geraç ã de relató rios. o o 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.
  16. 16. CacheFirst level cache Enquanto o EntityManager estiver aberto, ele armazena os objetos carregados por ele; Este cache é apagado quando o mé todo clear é chamado.Second level cache Armazena os objetos por EntityManagerFactory; Cache “por aplicaç ão”.
  17. 17. Cache
  18. 18. CacheTruque: 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).
  19. 19. Cache
  20. 20. CacheDica: 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ç ã externa altere o banco de dados, os o dados das entidades em cache de segundo nível ficam desatualizados. Procure colocar um tempo má ximo de validade para os dados.
  21. 21. CacheDica: Use cache de resultado de consultas caso as consultas sejam feitas com um conjunto restrito de valores.Nã é um recurso padrã mas grande parte dos providers JPA o o, 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ã de objetos do cache. o Pode levar a problemas de consumo excessivo de memó ria.
  22. 22. EJBDica: Evite transaç õ desnecessárias usando os es atributos de propagaç ão de transaç ão apropriados.Existem seis formas de propagaç ã de transaç ã o o: Required (default) Requires New Mandatory Not Supported Supports NeverCaso o mé todo nã utilize recursos transacionais, coloque como o “ Not Supported” ou mesmo “ Supports” para evitar iniciar transaç õ desnecessariamente. es
  23. 23. EJBDica: Reduza o custo de serializaç ão de desserializaç ão de objetos marcando atributos como transient.Instâ ncias de Session Bean que sã Stateful podem ser o armazenados no disco e removidos da memó ria quando não estã em uso. o PassivationEm 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).
  24. 24. Referências Java Performance Charlie Hunt, Binu John. Prentice Hall. Outubro, 2011. VisualVM Profiler http://visualvm.java.net Apresentaç ão do JavaOne 2010 http://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
  25. 25. Obrigado! Danival Taffarel Calegaridanival.calegari@matera.com http://twitter.com/danivaltc

×