Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Разное время выполнения запроса из C# и SQL Server Management Studio / 25 сообщений из 39, страница 1 из 2
30.10.2017, 18:46
    #39544758
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Привет всем!

Сложилась забавная ситуация. При вызове запроса из ASP.NET Web Service метода - запрос выполняется 30 секунд (по статистике профайлера). Снимаю текст вызова в SQL Server Profiler. Выполняю его же из SQL Server Management Studio. Время выполнения меньше секунды. При повторном выполнении операции - та же картина. Из сервиса - 30 секунд, из студии - меньше секунды.
Не представляю с какой стороны подобраться к решению проблемы. Может кто-то подсказать?
К сообщению приложено два скрина из профайлера

Скрин 1 - 30 секунд


Скрин 2 - меньше секунды
...
Рейтинг: 0 / 0
30.10.2017, 18:53
    #39544768
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
...
Рейтинг: 0 / 0
30.10.2017, 20:33
    #39544867
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.Pro http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
В моем случае
авторSET ARITHABORT OFF;
не привел к замедлению выполнения запроса в SSMS. Вобщем, первая часть не помогла - попробую покурить остальные.
Но - спасибо за помощь
...
Рейтинг: 0 / 0
30.10.2017, 21:04
    #39544879
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Чуть больше подробностей.
Хранимая процедура содержит большой запрос, пересекающий десятка полтора таблиц. При этом ожидается, что в результате будет не более 3-4 строк. Параметр процедуры - ИД записи в одной из таблиц.
Решил протестировать таким образом.
Сократил запрос до обращения к ОДНОЙ таблице, по ключу которой и идет поиск.
И... Все равно 30 секунд.
Выполнил следующее:
Код: sql
1.
EXEC sp_recompile sq_WSGetAppByLegId



и затем по совету автора статьи - запрос, возвращающий новый план из кеша
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
DECLARE @dbname    nvarchar(256),
        @procname  nvarchar(256)
SELECT @dbname = 'AmbQueue',
       @procname = 'dbo.sq_WSGetAppByLegId'
 
; WITH basedata AS (
   SELECT qs.statement_start_offset/2 AS stmt_start,
          qs.statement_end_offset/2 AS stmt_end,
          est.encrypted AS isencrypted, est.text AS sqltext,
          epa.value AS set_options, qp.query_plan,
          charindex('<ParameterList>', qp.query_plan) + len('<ParameterList>')
             AS paramstart,
          charindex('</ParameterList>', qp.query_plan) AS paramend
   FROM   sys.dm_exec_query_stats qs
   CROSS  APPLY sys.dm_exec_sql_text(qs.sql_handle) est
   CROSS  APPLY sys.dm_exec_text_query_plan(qs.plan_handle,
                                            qs.statement_start_offset,
                                            qs.statement_end_offset) qp
   CROSS  APPLY sys.dm_exec_plan_attributes(qs.plan_handle) epa
   WHERE  est.objectid  = object_id (@procname)
     AND  est.dbid      = db_id(@dbname)
     AND  epa.attribute = 'set_options'
), next_level AS (
   SELECT stmt_start, set_options, query_plan,
          CASE WHEN isencrypted = 1 THEN '-- ENCRYPTED'
               WHEN stmt_start >= 0
               THEN substring(sqltext, stmt_start + 1,
                              CASE stmt_end
                                   WHEN 0 THEN datalength(sqltext)
                                   ELSE stmt_end - stmt_start + 1
                              END)
          END AS Statement,
          CASE WHEN paramend > paramstart
               THEN CAST (substring(query_plan, paramstart,
                                   paramend - paramstart) AS xml)
          END AS params
   FROM   basedata
)
SELECT set_options AS [SET], n.stmt_start AS Pos, n.Statement,
       CR.c.value('@Column', 'nvarchar(128)') AS Parameter,
       CR.c.value('@ParameterCompiledValue', 'nvarchar(128)') AS [Sniffed Value],
       CAST (query_plan AS xml) AS [Query plan]
FROM   next_level n
CROSS  APPLY   n.params.nodes('ColumnReference') AS CR(c)
ORDER  BY n.set_options, n.stmt_start, Parameter



И вот - смотрю я в сгенерированный план... А там - Clustered Index Seek, при этом верно определяется Estimated Number of Rows - 1. И при этом - при выполнении из приложения - зачем-то все это длится около 30 секунд...
...
Рейтинг: 0 / 0
30.10.2017, 22:02
    #39544906
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Vadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?
...
Рейтинг: 0 / 0
31.10.2017, 14:09
    #39545244
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
skyANAVadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?

Проблема не на моем тестовом сервере. Самая печаль в том, что перенес базу локально к себе - проблема не повторяется
...
Рейтинг: 0 / 0
31.10.2017, 14:27
    #39545256
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Может надо обновить статистику на таблице?
...
Рейтинг: 0 / 0
31.10.2017, 14:36
    #39545261
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.Pro,

обновлял - еще вчера. Но не удивлюсь если поможет экспорт-импорт. Но на промбазе это делать не очень хорошо. Там и база под 60 гиг... Ну и хотелось бы понять в чем проблема и как ее решить кроме как экспортом-импортом.
ПС: пользовался вот этим ресурсом для получения скрипта сбора статистики
тынц
...
Рейтинг: 0 / 0
31.10.2017, 14:52
    #39545274
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.ProМожет надо обновить статистику на таблице?
С другой стороны - может поделитесь Вашим скриптом по сбору статистики и обновлению индексов? Возможно, мой подход не торт
...
Рейтинг: 0 / 0
31.10.2017, 14:56
    #39545279
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Забавно, но экспорт-импорт в новую БД на проблемном сервере не привел к решению проблемы. Т.е. с импортированной копией БД и перенастроенным сервисом - та же проблема с производительностью.
Вот тут я уже совсем в шоке
...
Рейтинг: 0 / 0
31.10.2017, 15:07
    #39545301
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
А нет, все на месте. Сейчас буду дальше тестировать. Не обновил все окружение, потому не шел на самом деле вызов... Пардоньте. буду экспериментировать
...
Рейтинг: 0 / 0
31.10.2017, 15:10
    #39545305
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Как насчет WITH (NOLOCK)?
...
Рейтинг: 0 / 0
31.10.2017, 15:17
    #39545314
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.ProКак насчет WITH (NOLOCK)?
В случае, когда я экспериментирую с копией БД на моем рабочем ПК - доступ к восстановленной БД имею только я. Параллельные записи исключены. И соответственно блокировки со стороны других сессий.
Потому, видимо, этот параметр ни при чем.
Или я неверно понимаю для чего этот параметр нужен?
ПС: в запросе этого параметра нет
...
Рейтинг: 0 / 0
31.10.2017, 15:18
    #39545316
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Итак, все-таки разобрался, что в восстановленной БД проблема осталась и это радует.
Предыдущие дергания попросил прибить модератора - извиняюсь за искривление описания задачи.
Сейчас попробую подключиться из студии и выполнить тот же самый запрос
...
Рейтинг: 0 / 0
31.10.2017, 16:56
    #39545423
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Vadim RomanenkoИли я неверно понимаю для чего этот параметр нужен?Дело не в сторонних блокировках, а в том, что сам запрос будет ставить блокировки на страницы, которые читает.

А вообще, обсуждать оптимизацию запроса в ASP вместо MSSQL наверное не очень логично, может стоить завести там новую тему, очистив ее от шелухи.
...
Рейтинг: 0 / 0
31.10.2017, 17:15
    #39545439
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.ProVadim RomanenkoИли я неверно понимаю для чего этот параметр нужен?Дело не в сторонних блокировках, а в том, что сам запрос будет ставить блокировки на страницы, которые читает.

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

Shocker.ProА вообще, обсуждать оптимизацию запроса в ASP вместо MSSQL наверное не очень логично, может стоить завести там новую тему, очистив ее от шелухи.
Так проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...
Я не вполне понимаю что тут можно оптимизировать... Разве что попробовать вручную как-то хинтами зафиксировать план...
...
Рейтинг: 0 / 0
31.10.2017, 17:16
    #39545440
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
skyANAVadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?
Наконец-то попробовал. Из студии запрос отрабатывает мгновенно. Проблем нет.
При вызове из приложения - 30 секунд...
...
Рейтинг: 0 / 0
31.10.2017, 17:18
    #39545441
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Единственная разница, которая мне видна - это в профайлере в колонке Event Class - при медленном выполнении указано RPC:Completed, при быстром - SQL:BatchCompleted.
Что-то мне подсказывает, что где-то здесь и порылась собака.
Кто может подсказать - может мне как-то переписать вызов?
...
Рейтинг: 0 / 0
31.10.2017, 17:23
    #39545443
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Собственно, сейчас работа идет через OleDb (OleDbCommand)
...
Рейтинг: 0 / 0
31.10.2017, 17:39
    #39545457
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Vadim RomanenkoТак проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...Тем не менее, люди там в курсе, что у многих возникает проблема другого плана при вызове из приложения (и в курсе той статьи, которую я привел в начале) и они смогут дать совет, куда и как копать.
...
Рейтинг: 0 / 0
31.10.2017, 17:57
    #39545470
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Shocker.ProVadim RomanenkoТак проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...Тем не менее, люди там в курсе, что у многих возникает проблема другого плана при вызове из приложения (и в курсе той статьи, которую я привел в начале) и они смогут дать совет, куда и как копать.

Ок, спасибо, попробую создать аналогичную тему в ветке про SQL Server.
ПС: попробовал через профайлер сравнить планы - навскидку они одинаковые :( Это была моя последняя версия...
...
Рейтинг: 0 / 0
01.11.2017, 09:16
    #39545745
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Vadim RomanenkoЕсли Вы предлагаете использовать этот хинт - то в моем случае это, мне кажется, бессмысленно. Потому что при тестировании сторонних блокировок быть не может.
Ну да, конечно не может быть. А на деле: 20917539
...
Рейтинг: 0 / 0
01.11.2017, 14:08
    #39546002
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
skyANAVadim RomanenkoЕсли Вы предлагаете использовать этот хинт - то в моем случае это, мне кажется, бессмысленно. Потому что при тестировании сторонних блокировок быть не может.
Ну да, конечно не может быть. А на деле: 20917539

Да-да, я был неправ :) Похоже, причина столь странного поведения найдена. Хотя я так и не понимаю до сих пор - каким образом сервис таки получает данные
...
Рейтинг: 0 / 0
01.11.2017, 18:31
    #39546326
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Vadim RomanenkoХотя я так и не понимаю до сих пор - каким образом сервис таки получает данныеНу если Вы (его аффтар. Эдакий машинист-многостаночник. Имеющий сырцы абсолютно всех компонентов.
И допиливающий тоже все компоненты. И клиент-серверное приложение, и sql-серверную часть, и web services)
не понимаете, то скорее всего это...

Мистика!
...
Рейтинг: 0 / 0
01.11.2017, 19:21
    #39546356
Vadim Romanenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разное время выполнения запроса из C# и SQL Server Management Studio
Так и запишем - мистика :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Разное время выполнения запроса из C# и SQL Server Management Studio / 25 сообщений из 39, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]