Я столкнулся с проблемой с LINQ To Entities.linq и параллелизм - SQL Server
Если я запустил свой запрос LINQ, то он использует Параллелизм (собирать потоки и репарационный поток) в плане выполнения, который вызывает много ожиданий CXPACKET.
Но если я запускаю LINQ переведенный запрос (который я получил через функцию ToTraceString) непосредственно на мой SQL-сервер, тогда план выполнения не содержит параллелизма.
Почему существует разница в отношении параллелизма SQL при его запуске через LINQ или сам SQL-запрос?
Как я могу преодолеть эту проблему? Я хочу, чтобы мой запрос LINQ выполнялся так же, как при непосредственном запуске SQL.
Пример планов выполнения:
с помощью LINQ:
SQL непосредственно:
Я могу опубликовать мой SQL запрос, но я не думаю, что это может help here ...
У меня была такая же проблема - запуск хранимой процедуры из веб-приложения вызвал таймауты, а запуск ее непосредственно из студии управления SQL был достаточно быстрым; в этом случае рекомпиляция хранимых процедур решила его. Если бы я был вами, я бы попытался просмотреть компилированные запросы - http://msdn.microsoft.com/en-us/library/bb896297.aspx (dunno, если это поможет) –
Попробуйте запустить следующую команду 'DBCC FREEPROCCACHE' а затем 'sp_updatestats' и посмотреть, существует ли проблема. – Magnus
Вы запустили SQL Profiler в отношении БД, чтобы увидеть, что SQL фактически выполняется Linq? Кроме того, есть ли что-нибудь смешное в строке соединения, которую использует клиент? – Robin