Плохая производительность в 99% веб-приложении NHibernate только для чтения - PullRequest
0 голосов
/ 26 марта 2012

В настоящее время я изучаю веб-приложение ASP.NET MVC, которое, как сообщается, имеет низкую производительность под нагрузкой.(Но загрузка составляет всего несколько запросов в секунду).

Мы используем MySQL + NHibernate + Castle ActiveRecord для отображения.Сеанс NHibernate открывается в начале каждого сеанса и остается открытым для просмотра.

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

Теперь что я 'Я думаю о том, что .. по каждому запросу транзакция базы данных открывается и фиксируется в конце.И в 99% наших запросов (действия MVC) никакие данные не должны быть записаны в базу данных.

  1. Возможно ли это, и видите ли вы преимущество в закрытии сеансов / транзакций ранее или даже отмечаете сеансы как прочитанные-only?
  2. Может ли блокировка базы данных стать узким местом, и если да, то можно ли явно избежать блокировки по крайней мере для транзакций только для чтения?

Ответы [ 2 ]

6 голосов
/ 26 марта 2012

Вы должны убедиться, что ваше приложение не загружает огромный объем данных из БД. Даже когда все выбранные n + 1 решены, вы можете загрузить миллионы записей, и это будет очень медленно.

Проверьте свои страницы с помощью NHibernate profiler . Это придет с предложениями по оптимизации. Если нет, то, вероятно, NH не является вашим узким местом.

0 голосов
/ 26 марта 2012

Если у вас всего несколько запросов в секунду, накладные расходы на открытие транзакций не являются причиной низкой производительности.Попробуйте разрешить NHibernate протоколировать все SQL, отправленные на сервер.Это может дать вам некоторое представление о том, почему я замедляюсь.Возможно, это отправка миллиарда запросов для каждого HTTP-запроса, иначе вам могут помочь некоторые правильно выбранные индексы в ваших таблицах.

...