tgoop.com/Java_Iibrary/1795
Create:
Last Update:
Last Update:
В Java-приложениях одна небольшая настройка может улучшить производительность в 50 раз.
@Transactional
public List<Order> getRecentOrders() {
return orderRepository.findRecent();
}
Видите здесь что-нибудь странное?
Аннотация
@Transactional
на методе, который просто делает read/GET вызов.Хуже всего то, что по умолчанию
@Transactional
работает в режиме read-write, то есть:- лишние блокировки ресурсов;
- база вынуждена обрабатывать транзакцию даже для простого SELECT.
Что можно сделать:
@Transactional(readOnly = true)
Это позволит:
Пропустить ненужные flush-операции в Hibernate.
Оптимизировать работу транзакций для SELECT-запросов.
Уменьшить оверхед от прокси и избежать лишних блокировок.
Правила, которые стоит помнить:
Не вешайте
@Transactional
везде подряд только ради «красоты».Используйте
@Transactional(readOnly = true)
для запросов.Убирайте
@Transactional
, если методу вообще не нужна транзакция.Регулярно профилируйте приложение — мелкие ошибки выливаются в огромные потери производительности.