У нас есть приложение WCF, которое использует 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, чтобы найти точную проблему в «наборе результатов обработки»?
Любой совет с благодарностью.