2016-07-21 2 views
-1

У меня проблема с производительностью с SqlDataReader. Кажется, что узкое место читает большие строки строк (некоторые значения составляют около 2 Кб). Для чтения 5000 строк требуется 20 минут, тогда как тот же запрос выполняется в SSMS менее чем за 20 секунд и возвращает те же данные. Есть ли способ ускорить SqlDataReader?Производительность SqlDataReader

UPDATE

Это не выглядит как исполнение плана выпуска, поскольку .Net профайлер показывает, что GetValue метод (и внутренне TryReadSqlStringValue) потребляет все время.

UPDATE 2

Да, это была проблема с различными казнями планы, даже если запросы были одинаковыми. После того как sp_updatestats было выполнено исправление вызова.

+0

Проверить этот пост - http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/ – Devart

+0

Эта статья в основном относится к казнями планов, но профайлер показывает, что большую часть времени потребляется чтением строковых полей – Random

+1

Профилировщик чего? BTW читает о 'OPTION (RECOMPILE)', если у вас есть параметры в вашем запросе – Devart

ответ

2

SSMS также использует SqlDataReader. Проблема с производительностью может быть связана либо с другим планом выполнения запроса, либо с кодом приложения при обработке результатов. Начните с сравнения планов. Ниже приведен пример получения плана (ов) из кеша.

SELECT sql_text.text, query_plan.query_plan 
FROM sys.dm_exec_cached_plans AS cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS sql_text 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS query_plan 
WHERE sql_text.text LIKE N'%Your query%'; 
Смежные вопросы