2012-03-06 4 views
-1

У кого-нибудь еще были всплески CPU после перехода на NHibernate?Asp.net NHibernate Производительность процессора после обновления

Мы перешли на использование NHibernate около 2 лет назад. С тех пор у нас были проблемы с сервером, работающим с процессором около 60 - 80. У нас также были проблемы с нехваткой памяти на сервере.

Weve постоянно предлагалось оптимизировать наш запрос. Что мы сделали с ограниченным успехом. Это было не до тех пор, пока я недавно не обновился с NHibernate 2.1 до 3.2, что мы наконец увидели улучшение в CPU. Он снизился с 60% в среднем до 30%. Я был поражен, мне говорили многие, которые считают себя экспертами, что модернизация NHibernate только приведет к ограниченным улучшениям, если вообще будет.

Мой вопрос ... Кто-нибудь еще заметил, что пики CPU с NHibernate и они увидели какие-либо улучшения после выполнения основного обновления. И, наконец, почему именно новая версия работает намного лучше? Я знаю, что NHibernate 3 имеет намного лучшую поддержку linq, и около 70 процентов моих запросов используют Linq, поэтому я предполагаю, что это может быть частью причины, по которой я вижу улучшение.

Кроме того, есть ли у кого-нибудь идеи, как я могу оптимизировать NHibernate, чтобы обеспечить еще лучшую производительность процессора, отличную от обновления DLL, которые я уже сделал.

В настоящее время я работаю с NHibernate 3.2 и белым NHibernate 1.2, обновленным с 2.1 и 1.0 соответственно.

+0

Является ли БД и веб-сайт на том же самом сервере? – Rippo

+0

Также этот SQL-сервер? – Rippo

+0

Windows Server 2003, БД на отдельном сервере, SQL Server 2005. Сервер БД относительно стабилен, нет всплесков ЦП. – matwonk

ответ

3

Я подозреваю, что вам сказали то же, что и я, чтобы рекомендовать, но я призываю вас взглянуть на все возможности и сэкономить.

Weve consistently been told to optimize our query - Подозрения всегда лежат либо с SQL, генерируемым ORM, либо с количеством времени, которое БД берет на выполнение запроса. Это хороший совет, и вы должны опровергнуть это, используя следующие методы.

Сначала я установил trace на сервере базы данных в реальном времени, который работает в течение недели. Как только это будет сделано, вы обнаружите, что получаете предложения по индексам или связанным с SQL вопросам.

Во-вторых, я запустил NHProf в своей коробке разработки и проведу некоторые стресс-тесты против сильно используемых страниц или страниц, на которых много поездок по базам данных, чтобы посмотреть, что происходит за кулисами в NHibernate. NHProf даст вам советы о различных проблемах, в том числе; выберите n + 1, неограниченные результаты, большое количество возвращенных строк, запросы со слишком большим количеством объединений и т. д. Опять же, этот инструмент неоценим для устранения разрыва между SQL-сервером и вашим кодом.

Надеюсь, после этого упражнения у вас появятся идеи о том, как исправить некоторые проблемы, ввести кеширование, или если вы обнаружите, что у вас нет каких-либо предметов для обращения, вы получите ценную обратную связь, которую затем можете отправить в группу NHUser.

В конце концов, если вы думаете об этом, то десятки тысяч пользователей используют NHibernate. Я использовал NHibernate сам в течение нескольких лет и подписался на группу NHusers, и я еще не видел проблему с шипами процессора. Всегда это тоже получается; генерируется SQL, база данных находится под давлением или большие массивы данных гидратируются

+0

Спасибо за информацию. Я проверю профайлеры и таблицы. У меня не было проблем с процессором на других серверах, которые мы размещаем.Только это, разница между этим сервером и другими заключается в том, что у других есть около 20 сайтов, использующих NHyrbinate, о котором я говорю, имеет около 510 сайтов с использованием NHybrinate (и все они используют общий код). В основном такой же код, различный дизайн для каждого сайта. – matwonk

+0

Rippo, я столкнулся с проблемой при одновременном запуске нескольких запросов Ajax. У каждого из них есть сеанс, созданный для него. Это плохая практика? Если да, можете ли вы порекомендовать решение? (У меня есть вопрос, размещенный здесь: http://stackoverflow.com/questions/14615216/moving-from-ef-to-fluent-nhibernate-memory-leaks-architecture – Chazt3n