Что может привести к тому, что производительность Hibernate будет колебаться недетерминированным образом? - программирование
Подтвердить что ты не робот

Что может привести к тому, что производительность Hibernate будет колебаться недетерминированным образом?

У меня есть проект, в котором мы проводим ночной тест производительности. Это один и тот же тест каждую ночь, когда на наш сайт попадают сотни одновременных "пользователей" в течение 3 часов. Результаты работы заканчиваются в одном из двух состояний - плохом или хорошем, и каждое состояние, похоже, согласуется с самим собой. Наш парень из базы данных (oracle btw) заметил, что в дни плохой производительности у нас было бы гораздо больше звонков, чем в хорошие дни, но только из одного запроса.

Из моего анализа до сих пор я думаю, что он имеет отношение к спячке, предпочитая использовать/не использовать прокси, но я не могу понять, что бы спустило спящий режим на несколько дней, а не на другие. Что может вызвать такое неустойчивое недетерминированное поведение в Hibernate? Я нахожусь в Hibernate 4.2.0 и spring. Мы не используем кеш второго уровня. На наших серверах нет других приложений.

Объект, вызывающий испускание этого вызова, находится в конце длинной цепочки объектов, связанных с родительским/дочерним. Мы работаем руководителем этой сети.

Bad performance Плохой прогон, обратите внимание на 4-м выполнение 9wu... query

A night of good performance Хороший прогон, обратите внимание на 630k выполнение 9wu... query

Изменить: я не могу в основном воспроизвести это в модуле. Похоже, что когда у меня -xmx установлен очень низкий (28 м), дополнительных вызовов нет, но в xmx = 128m я получаю его большинство прогонов. Любые подсказки о том, где в Hibernate я могу понять, почему/как он примет решение о том, должен ли он прокси-сервер или нет?

Изменить 2: я не могу последовательно воспроизводить в своем модуле. Он отлично подойдет для 5 прогонов, а затем не будет работать 3, а затем сработает. Каждый раз, когда я запускаю то же самое unit test. Кажется, это проблема N + 1, она загружает кучу детей через запрос "select item0...", но во время хорошего запуска решает использовать другой запрос или не отбрасывает записи между webservice звонки. Я увижу, что я могу сделать, чтобы запутать объекты и предоставить некоторые подробности. К сожалению, к сожалению, это дерево, хранящееся в базе данных, и использует наследование с дискриминатором.

4b9b3361

Ответ 1

Трудно, конечно, сказать, почему это может произойти. Тем не менее, есть несколько хороших ресурсов для оптимизации производительности в Hibernate и проблем с ее отладкой.

В связанной статье автор предлагает, чтобы лучший способ диагностики проблем производительности - использовать YourKit Java Profiler. Если ваша среда загрузки и производительности удалена, и вы не можете запустить профилировщик локально вы можете подключить один из них удаленно. Конечно, запуск профилировщика имеет некоторые накладные расходы, поэтому вы можете найти свои характеристики производительности, потому что у вас есть один прикрепленный. Тем не менее, это, вероятно, лучший выбор для отслеживания того, что происходит.

Другие полезные ссылки:

http://java.dzone.com/articles/debugging-hibernate-generated http://jroller.com/jcarreira/date/20050223#hibernate_tips