LINQ-to-SQL блокирует SQL Server во время запроса? - PullRequest
0 голосов
/ 06 января 2010

Странная проблема. Я тестирую написанное приложение ASP.NET, которое запрашивает SQL-сервер через AJAX. Приложение использует LINQ-to-SQL для загрузки данных из приблизительно 8 или около того таблиц в объединении, и время от времени вызов SQL-сервера блокируется и никогда не возвращается.

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

Другие симптомы:

  1. Загрузка процессора на сервере достигает 40% при выполнении этого вызова и остается там даже после закрытия приложения («Остановлено» в Visual Studio).

  2. Сервер продолжает выполнять вызов, пока я на самом деле не пойду и не убью веб-сервер Visual Studio (Cassini), который живет в трее.

  3. Если посмотреть на то, что делает сервер SQL, все, что мы можем видеть, это то, что он выполняет вызов LINQ-to-SQL, ничто не выглядит необычно.

У кого-нибудь есть мысли о том, как это "пахнет"?

Спасибо, Sam

Ответы [ 2 ]

1 голос
/ 06 января 2010

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

SQL Server выберет уничтожение одного из элементов в мертвой блокировке, но это также зависит от настроек времени ожидания запроса. Если время ожидания достаточно велико (300 секунд ...), SQL Server может продолжить выполнение вызова некоторое время.

Если возможно, вы можете использовать NOLOCK в своих таблицах при вызове sql, чтобы он был неблокирующим. Для Linq-To-Sql установите уровень изоляции транзакции на Read Uncommitted, он такой же, как NOLOCK.

Кроме того, я бы добавил трассировку для вызовов linq-to-sql и повторно запустил их в sql profiler, чтобы посмотреть, есть ли что-то, что можно настроить немного лучше, например, лучшие индексы и т. Д.

0 голосов
/ 26 февраля 2010

Я видел подобное поведение в linq, если транзакция начинается, но никогда не завершается.

...