Создание скомпилированного запроса linq и проблемы с производительностью с обычным LINQ - PullRequest
0 голосов
/ 05 декабря 2018

В настоящее время у меня есть запрос, который выглядит следующим образом:

 using (var ctx = new myEntities())
 {
    ctx.Configuration.LazyLoadingEnabled = false;
    ctx.Configuration.ProxyCreationEnabled = false;
    ctx.Database.CommandTimeout = 200;
    competitors = DBRetry.Do(() => ctx.SearchedUsers.AsNoTracking().Where(x => x.InQueue == true).OrderBy(x => x.LastUpdatedAt).Take(2000).ToList(), TimeSpan.FromSeconds(1));

 }

Так как часто таблица "SearchedUsers" используется другими пользователями / приложениями, я обычно получаю замедления / взаимоблокировки при выполнении запроса к этой базе данных.

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

Итак, мои вопросы здесь:

  1. Как бы превратить этот запрос в скомпилированный
  2. Сколько производительности можетЯ ожидаю, что при выполнении скомпилированного запроса вместо обычного?

Может ли кто-нибудь помочь мне реализовать решение скомпилированного запроса?

1 Ответ

0 голосов
/ 08 декабря 2018

Создайте свой запрос как представление в базе данных.Установите подсказку NOLOCK в запросе или ПРОЧИТАЙТЕ УРОВЕНЬ ИЗОЛЯЦИИ НЕОГРАНИЧЕННЫМ.Затем установите объект модели для представления в виде таблицы.

Компиляция запроса поможет повысить производительность, но не поможет с блокировкой записей.

Кроме того, почему выиспользуя CommandTimeout 200 миллисекунд?Что произойдет, если вы настроите это?

...