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

PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
PPTX
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
PPTX
Анализируем данные с Clickhouse
PPTX
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
PDF
Laravel websockets
PPTX
Teched2011 1С:Предприятие + MS SQL Server 2008 R2
PDF
Как устроено API в AppMetrica
PDF
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Анализируем данные с Clickhouse
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
Laravel websockets
Teched2011 1С:Предприятие + MS SQL Server 2008 R2
Как устроено API в AppMetrica
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...

What's hot (20)

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

Viewers also liked (7)

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

Similar to Hibernate & JPA perfomance (20)

PPTX
Java black box profiling
PDF
Построение системы аналитики
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PDF
PostgreSQL performance recipes
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
PDF
И снова разработка под iOS. Павел Тайкало
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
PDF
20100314 virtualization igotti_lecture06
PPTX
Построение аналитического хранилища на 100 петабайт
PPTX
Путь мониторинга, DevOps club в Grammarly
PPTX
SECON'2016. Алексеев Олег, Живой API
PPT
MySQL для высоконагруженных проектов
PPTX
NoBigData - потоковая система аналитики clientside производительности, Сергей...
PPTX
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
PDF
"Новые возможности MySQL 5.7"
Java black box profiling
Построение системы аналитики
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PostgreSQL performance recipes
Оптимизация производительности нагруженных веб-систем на Java
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
И снова разработка под iOS. Павел Тайкало
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
20100314 virtualization igotti_lecture06
Построение аналитического хранилища на 100 петабайт
Путь мониторинга, DevOps club в Grammarly
SECON'2016. Алексеев Олег, Живой API
MySQL для высоконагруженных проектов
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
СУБД 2013 Лекция №9 "Безопасность баз данных"
"Новые возможности MySQL 5.7"

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 «В программировании есть две сложных вещи: инвалидация кэша и выбор имени для чего-нибудь.» Фил Карлтон