У меня есть проект, в котором мы проводим ночной тест производительности. Это один и тот же тест каждую ночь, когда на наш сайт попадают сотни одновременных "пользователей" в течение 3 часов. Результаты работы заканчиваются в одном из двух состояний - плохом или хорошем, и каждое состояние, похоже, согласуется с самим собой. Наш парень из базы данных (oracle btw) заметил, что в дни плохой производительности у нас было бы гораздо больше звонков, чем в хорошие дни, но только из одного запроса.
Из моего анализа до сих пор я думаю, что он имеет отношение к спячке, предпочитая использовать/не использовать прокси, но я не могу понять, что бы спустило спящий режим на несколько дней, а не на другие. Что может вызвать такое неустойчивое недетерминированное поведение в Hibernate? Я нахожусь в Hibernate 4.2.0 и spring. Мы не используем кеш второго уровня. На наших серверах нет других приложений.
Объект, вызывающий испускание этого вызова, находится в конце длинной цепочки объектов, связанных с родительским/дочерним. Мы работаем руководителем этой сети.
Плохой прогон, обратите внимание на 4-м выполнение 9wu... query
Хороший прогон, обратите внимание на 630k выполнение 9wu... query
Изменить: я не могу в основном воспроизвести это в модуле. Похоже, что когда у меня -xmx установлен очень низкий (28 м), дополнительных вызовов нет, но в xmx = 128m я получаю его большинство прогонов. Любые подсказки о том, где в Hibernate я могу понять, почему/как он примет решение о том, должен ли он прокси-сервер или нет?
Изменить 2: я не могу последовательно воспроизводить в своем модуле. Он отлично подойдет для 5 прогонов, а затем не будет работать 3, а затем сработает. Каждый раз, когда я запускаю то же самое unit test. Кажется, это проблема N + 1, она загружает кучу детей через запрос "select item0...", но во время хорошего запуска решает использовать другой запрос или не отбрасывает записи между webservice звонки. Я увижу, что я могу сделать, чтобы запутать объекты и предоставить некоторые подробности. К сожалению, к сожалению, это дерево, хранящееся в базе данных, и использует наследование с дискриминатором.