SlideShare a Scribd company logo
Performance Hibernate & JPA
Java meetup #1
Omsk, 2017
About me
Меня зовут Корсаков Анатолий
Проект LOANS, Raiffeisenbank
Презентацию скачать здесь
Веду свой блог:
akorsa.ru
Quizzes
• What is Hibernate?
• How to measure?
• Connection providers
• Identifier generators
• Batching
• Fetching
• Caching
Agenda
What Hibernate really does?
Full execution chain
How to measure
Используем встроенное средство
измерения статистики
Hibernate Statistics
[06.02.17, 16:27:00:200] DEBUG ConcurrentStatisticsImpl -
HHH000117: HQL: [CRITERIA] select this_.id as id1_10_0_, ..,
this_.status_for_repricing_history as status_f7_10_0_ from
CR_STATUS this_ where this_.status_code=8, time: 3ms, rows: 1
Время затраченное
на выполнение запроса Количество строк в resultSet
Hibernate Statistics
[[06.02.17, 17:08:44:857] INFO
StatisticalLoggingSessionEventListener - Session Metrics {
34100 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
125600 nanoseconds spent preparing 2 JDBC statements;
30524100 nanoseconds spent executing 2 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
13163000 nanoseconds spent executing 1 flushes (flushing a total
of 176 entities and 0 collections);
197900 nanoseconds spent executing 2 partial-flushes (flushing a
total of 1 entities and 1 collections)
Время затраченное
на выполнение запроса
Количество запросов
Использование
кэша
Typical Causes
• Проблема n + 1 запроса
• Медленные запросы
• Неправильная стратегия извлечения
• Медленная генерация ID
• Продолжительные сессии
• Большое количество сущностей
Connection Providers
https://github.com/brettwooldridge/HikariCP
Hikari
Hikari
Tomcat
Tomcat
Slow ID generation
IDENTITY SEQUENCE TABLE
Дефолтный для SQL
Server и MySQL при
флаге AUTO
Дефолтный для Oracle и
PostgreSQL при флаге
AUTO
Использовать только если
SEQUENCE не доступен
MySQL –
AUTO_INCREMENT
PostgreSQL –
SERIAL_TYPE
Требуется отдельная
транзакция для
получения
идентификатора
ID доступен только лишь
после выполнения insert
Идентификаторы
вычитываются отдельно
Используется таблица в
БД
Генерируется самой БД Используются
оптимизации самого
Hibernate
Нельзя использовать
батчинг
Можно использовать при
батчинге
N + 1, lazy loading issues
• Делайте Flush состояния сессии для избежания проблем с памятью
• Используйте опции для JDBC батчинга
Use pagination
Настройка fetch size на уровне запроса
• Postgres использует LIMIT и OFFSET
• Oracle имеет rownum
• MySQL использует LIMIT и OFFSET
• MSSQL имеет TOP keyword в селекте
Cashing
First Level Cache
• Активируется по умолчанию
• Привязан к Hibernate session
• Хранит все сущности которые были
использованы в сессии
• Не поддерживает многопоточность
• Кэш для всех сессий на уровне SessionFactory
• Необходимо активировать отдельно
• persistence.xml или EntityManagerFactory
• Используется отдельный провайдер для кэша
• Можно масштабировать
Second Level Cache
Caching strategies
«В программировании есть две сложных вещи: инвалидация
кэша и выбор имени для чего-нибудь.»
Фил Карлтон
Caching strategies
Спасибо за внимание!
Примеры скачать здесь

More Related Content

What's hot (20)

PPTX
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Ontico
 
PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
ODP
!!9hl2008 New
Ontico
 
ODP
Hl2008 New
Ontico
 
PPTX
MongoDB. Как готовить, с чем едят?
Tim Mironov
 
PDF
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
 
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
PDF
Денис Трифонов
CodeFest
 
ODP
ClickHouse
Alexey Milovidov
 
PPT
лабраб 1
Gulnaz Shakirova
 
PPTX
MongoDB первые впечатления
fudz1k
 
PDF
Дмитрий Долгов
CodeFest
 
PPTX
No sql.mongodb scaling
Олег Винников
 
PDF
Clickhouse
Clickky
 
PPTX
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
PPT
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ontico
 
PDF
Андрей Лузин
CodeFest
 
PDF
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
PPTX
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Dmitry Degtyarev
 
PDF
Ещё один поиск Яндекса
Alexander Koshelev
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Ontico
 
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
!!9hl2008 New
Ontico
 
Hl2008 New
Ontico
 
MongoDB. Как готовить, с чем едят?
Tim Mironov
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Mikhail Tabunov
 
Денис Трифонов
CodeFest
 
ClickHouse
Alexey Milovidov
 
лабраб 1
Gulnaz Shakirova
 
MongoDB первые впечатления
fudz1k
 
Дмитрий Долгов
CodeFest
 
No sql.mongodb scaling
Олег Винников
 
Clickhouse
Clickky
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ontico
 
Андрей Лузин
CodeFest
 
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Dmitry Degtyarev
 
Ещё один поиск Яндекса
Alexander Koshelev
 

Viewers also liked (7)

PPT
Hibernate
Sunil OS
 
PPT
Log4 J
Sunil OS
 
PPT
JUnit 4
Sunil OS
 
PPTX
Hibernate
Prashant Kalkar
 
PPT
Java Networking
Sunil OS
 
PPT
Jsp/Servlet
Sunil OS
 
PPT
Java Input Output and File Handling
Sunil OS
 
Hibernate
Sunil OS
 
Log4 J
Sunil OS
 
JUnit 4
Sunil OS
 
Hibernate
Prashant Kalkar
 
Java Networking
Sunil OS
 
Jsp/Servlet
Sunil OS
 
Java Input Output and File Handling
Sunil OS
 
Ad

Similar to Hibernate & JPA perfomance (10)

PPT
Введение в hibernate
Unguryan Vitaliy
 
PDF
Java Platform Performance BoF
Dmitry Buzdin
 
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
PDF
Введение в отладку производительности MySQL приложений
Sveta Smirnova
 
PPTX
Java Performance
Alex Tumanoff
 
PPT
использование Hibernate java persistence.part 1.
Asya Dudnik
 
PPTX
PostgreSQL и JDBC: выжимаем все соки
Vladimir Sitnikov
 
PDF
[jeeconf-2011] Java Platform Performance BoF
Aleksey Shipilev
 
PPTX
Асинхронный биллинг для службы такси - IzhDevCom November 2014
Egor Konovalov
 
PPT
использование Hibernate java persistence.part 4.
Asya Dudnik
 
Введение в hibernate
Unguryan Vitaliy
 
Java Platform Performance BoF
Dmitry Buzdin
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
Введение в отладку производительности MySQL приложений
Sveta Smirnova
 
Java Performance
Alex Tumanoff
 
использование Hibernate java persistence.part 1.
Asya Dudnik
 
PostgreSQL и JDBC: выжимаем все соки
Vladimir Sitnikov
 
[jeeconf-2011] Java Platform Performance BoF
Aleksey Shipilev
 
Асинхронный биллинг для службы такси - IzhDevCom November 2014
Egor Konovalov
 
использование Hibernate java persistence.part 4.
Asya Dudnik
 
Ad

Hibernate & JPA perfomance

  • 1. Performance Hibernate & JPA Java meetup #1 Omsk, 2017
  • 2. About me Меня зовут Корсаков Анатолий Проект LOANS, Raiffeisenbank Презентацию скачать здесь Веду свой блог: akorsa.ru
  • 4. • What is Hibernate? • How to measure? • Connection providers • Identifier generators • Batching • Fetching • Caching Agenda
  • 7. How to measure Используем встроенное средство измерения статистики
  • 8. Hibernate Statistics [06.02.17, 16:27:00:200] DEBUG ConcurrentStatisticsImpl - HHH000117: HQL: [CRITERIA] select this_.id as id1_10_0_, .., this_.status_for_repricing_history as status_f7_10_0_ from CR_STATUS this_ where this_.status_code=8, time: 3ms, rows: 1 Время затраченное на выполнение запроса Количество строк в resultSet
  • 9. Hibernate Statistics [[06.02.17, 17:08:44:857] INFO StatisticalLoggingSessionEventListener - Session Metrics { 34100 nanoseconds spent acquiring 1 JDBC connections; 0 nanoseconds spent releasing 0 JDBC connections; 125600 nanoseconds spent preparing 2 JDBC statements; 30524100 nanoseconds spent executing 2 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 13163000 nanoseconds spent executing 1 flushes (flushing a total of 176 entities and 0 collections); 197900 nanoseconds spent executing 2 partial-flushes (flushing a total of 1 entities and 1 collections) Время затраченное на выполнение запроса Количество запросов Использование кэша
  • 10. Typical Causes • Проблема n + 1 запроса • Медленные запросы • Неправильная стратегия извлечения • Медленная генерация ID • Продолжительные сессии • Большое количество сущностей
  • 12. Slow ID generation IDENTITY SEQUENCE TABLE Дефолтный для SQL Server и MySQL при флаге AUTO Дефолтный для Oracle и PostgreSQL при флаге AUTO Использовать только если SEQUENCE не доступен MySQL – AUTO_INCREMENT PostgreSQL – SERIAL_TYPE Требуется отдельная транзакция для получения идентификатора ID доступен только лишь после выполнения insert Идентификаторы вычитываются отдельно Используется таблица в БД Генерируется самой БД Используются оптимизации самого Hibernate Нельзя использовать батчинг Можно использовать при батчинге
  • 13. N + 1, lazy loading issues
  • 14. • Делайте Flush состояния сессии для избежания проблем с памятью • Используйте опции для JDBC батчинга
  • 15. Use pagination Настройка fetch size на уровне запроса • Postgres использует LIMIT и OFFSET • Oracle имеет rownum • MySQL использует LIMIT и OFFSET • MSSQL имеет TOP keyword в селекте
  • 17. First Level Cache • Активируется по умолчанию • Привязан к Hibernate session • Хранит все сущности которые были использованы в сессии • Не поддерживает многопоточность
  • 18. • Кэш для всех сессий на уровне SessionFactory • Необходимо активировать отдельно • persistence.xml или EntityManagerFactory • Используется отдельный провайдер для кэша • Можно масштабировать Second Level Cache
  • 19. Caching strategies «В программировании есть две сложных вещи: инвалидация кэша и выбор имени для чего-нибудь.» Фил Карлтон