У меня есть запрос в приложении MVC, выполнение которого занимает около 20 секунд (с использованием NHibernate 3.1).Когда я выполняю запрос вручную в Management studio, это занимает 0 секунд.
Я видел похожие вопросы на SO о проблемах, похожих на эту, поэтому я продвинулся на шаг дальше.
Я перехватил запрос с помощью Sql Server Profiler и выполнил запрос с помощью ADO.NET в моем приложении.
Запрос, полученный от Profiler, выглядит примерно так: "exec sp_executesql N'select ...."
Мой код ADO.NET:
SqlConnection conn = (SqlConnection) NHibernateManager.Current.Connection;
var query = @"<query from profiler...>";
var cmd = new SqlCommand(query, conn);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return RedirectToAction("Index");
Этот запрос также очень быстрый и не требует времени для выполнения.
Кроме того, я видел кое-что очень странное вПрофилировщик.Запрос, выполненный из NH, имеет следующую статистику:
читает: 281702 пишет: 0
Запрос из ADO.NET:
читает: 333 пишет: 0
У кого-нибудь есть подсказка?Могу ли я предоставить какую-либо информацию для диагностики проблемы?
Я думал, что это может быть связано с некоторыми настройками соединения, но версия ADO.NET использует то же соединение от NHibernate.
Заранее спасибо
ОБНОВЛЕНИЕ:
Я использую NHibernate LINQ.Запрос является огромным, но это запрос на пейджинг, из которого выбирается всего 10 записей.
Параметры, которые передаются в "exec sp_executesql":
@ p0 int, @ p1 datetime, @ p2 datetime, @ p3 bit, @ p4 int, @ p5 int
@ p0 = 10, @ p1 = '2009-12-01 00:00:00', @ p2 = '2009-12-31 23:59:59 ', @ p3 = 0, @ p4 = 1, @ p5 = 0