проблема блокировки запроса linq (linq to sql) - PullRequest
0 голосов
/ 24 августа 2010

Я получил исключение времени ожидания запроса linq. После небольшого поиска в Интернете, используя TransactionScope, чтобы сделать его «nolock», я получаю свой голос. Тем не менее, после использования приведенного ниже кода, я все еще получаю то же самое исключение времени ожидания. Любая помощь оценивается, спасибо заранее.

IEnumerable<IGrouping<string, Log>> grps = logs.GroupBy(l => l.msg_shortdesc);
using (var t = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
  var lst = grps.ToList();
}

1 Ответ

1 голос
/ 24 августа 2010

У вас есть правильная стратегия и операторы с TransactionOptions и IsolationLevel.ReadUncommitted, чтобы помочь использовать NOLOCK в ваших операторах SQL. Гансельман предлагает это !

Возникает вопрос, являются ли операторы SQL, сгенерированные LINQ To SQL, производительными для базы данных.Помните, что Dev против Test и Prod будут работать по-разному, в зависимости от количества строк в вашей таблице и типов данных в вашем запросе.

Некоторые вещи для проверки:

  • Что за оператор SQL отправляется на сервер?Проверьте с помощью SQL Profiler.Работает ли этот SQL своевременно в специальном запросе через SSMS?

  • Есть ли индекс для столбца msg_shortdesc?Добавьте новый индекс, если он не существует, в эту таблицу для этого столбца.Повторите ваш запрос LINQ To SQL, чтобы проверить его производительность.

Похоже, у вас нет возможности изменить конфигурацию базы данных (индексы).Предположим, что без возможности вносить изменения в конфигурацию вы не сможете сделать «правильные» настройки для повышения производительности.К сожалению, вы будете постоянно зависеть от случайности нагрузки, создаваемой другими пользователями.

Если вы абсолютно не можете создать индекс, рассмотрите стратегию кэширования для этого набора данных.Возможно, загрузите эти данные в Session и просрочите их каждые n минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...