У нас есть приложение WCF, которое использует NHibernate для запроса данных из базы данных. После установки приложения в новую тестовую среду мы сталкиваемся с некоторыми проблемами производительности с запросами. В нашей старой и новой среде используются разные серверы Oracle, но обе базы данных имеют одинаковые данные.NHibernate + Oracle: проблемы с частотой при запросе данных
Мы прошли через наши журналы NHibernate и определили проблемную часть:
2010-12-02 07:14:22,673 NHibernate.SQL - SELECT this_.CC...
2010-12-02 07:14:22,688 NHibernate.Loader.Loader - processing result set
2010-12-02 07:14:27,235 NHibernate.Loader.Loader - result set row: 0
В этом случае запрос возвратил одну строки. Но кажется, что в нашей новой среде «результат обработки результатов» занимает гораздо больше времени (5 секунд против 0,5 секунды), чем в нашей другой среде. Есть ли способ выяснить, что внутри «набора результатов обработки» занимает так много времени?
Примечание. Выполнение одного и того же точного запроса непосредственно в БД с помощью Toad не воспроизводит проблему. С помощью Toad оба сервера базы данных одинаково быстры.
Мы используем DetachedCriteria для создания запроса, а затем она выполняется так:
Dim criteria As ICriteria = crit.GetExecutableCriteria(GetSession())
Return New Generic.List(Of T)(criteria.List(Of T))
Версия NHibernate является 2.1.2.4, и мы используем ActiveRecord 2.1.0 для создания отображения. Серверы Oracle имеют версию 10g.
Итак, в нашем случае у нас есть две среды, которые имеют одну и ту же версию приложения с идентичными конфигурационными файлами и запрашивают идентичные базы данных, но имеют разные серверы приложений и оракулов. В одной среде запрос через NHibernate занимает около 5,5 секунд, а в течение еще 0,5 секунд. Результаты согласованы, и один и тот же запрос был выполнен примерно в 50 раз для обеих сред.
Есть ли что-то в конфигурации Oracle, которая может привести к неправильной работе с NHiberate? И есть ли способ получить более подробный выход из NHibernate, чтобы можно было найти точную проблему внутри «набора результатов обработки»?
Любые советы приветствуются.
Трудно сказать .. Не может ли быть узкое место в сети между новой тестовой средой и сервером db? Вы пытались запустить Toad с сервера WCF? – 2010-12-02 06:31:04
Чтобы устранить базу данных, вы можете проследить сеанс и сравнить результаты по старым и новым. Может быть, разработчик sql явно задает параметры сеанса, которые по умолчанию различаются для новой и старой базы данных. – 2010-12-02 08:28:39