Nesse
artigo vou trazer algo que vi sobre a importância de fazer uso correto de cache
do Hibernate em um artigo do Vlad Mihalcea que deixo no final para que possam
acessar e ver outros detalhes como o gráfico que mostra a diferença de tempo entre
a consulta que usa e a que não usa o cache.
Não
vou me prender a demonstração da melhora de performance pois isto está no
artigo dele. Aqui quero apenas mostrar a configuração necessária e dizer o porquê
configurar o cache de acordo com o tamanho da sua aplicação.
As
consultas JPQL são compiladas antes da execução, e como sabemos, há um custo
para se compilar um código. Então, caso o cache não esteja configurado
corretamente, todas as vezes que as consultas forem executas elas serão
compiladas, gerando sempre esse custo adicional. As consultas usando Criteria API
também passam por esse impacto porque são transformadas em JPQL;
Por
padrão o Hibernate coloca 2048 consultas no cache, mas se seu sistema for muito
grande isso pode não ser suficiente.
A
propriedade que trata dessa configuração é a hibernate.query.plan_cache_max_size. Basta
calcular quantas consultas seu sistema tem e configurar essa propriedade para
atender essa demanda. Lembrando que o cache não armazena apenas JPQL, então o
valor precisa ser a soma de todas as consultas do sistema.
No
caso que Native Queries, embora não haja esse processo de compilação, o
hibernate guarda metadados sobre os parâmetros passados, e a configuração desse
cache é feita na propriedade hibernate.query.plan_parameter_metadata_max_size. O valor
default é 128, mas como mostrado no artigo do Mihalcea, a diferença para Native
Queries não é tão grande com ou sem o cache configurado.
Você pode configurar essas propriedades no persistence.xml como abaixo:
<
persistence
>
<
persistence-unit
name
=
"my-persistence-unit"
>
...
<
properties
>
<! – consultas - default: 2048 – >
<
property
name
=
"hibernate.query.plan_cache_max_size"
value
=
"4096"
/>
<! – metadados - default: 128 – >
<
property
name
=
"hibernate.query.plan_parameter_metadata_max_size"
value
=
"256"
/>
</
properties
>
</
persistence-unit
>
</
persistence
>
Fonte: https://vladmihalcea.com/hibernate-query-plan-cache/
Nenhum comentário:
Postar um comentário