Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Господа, добрый день. Небольшая предыстория: наша компания приобрела ECM систему. На этапе внедрения CRM модуля мы импортировали большое количество данных из старой CRM системы с помощью скриптов, использующих встроенный в эту систему фреймвок. После импорта данных при выполнении определенных действий (например, создании звонка) система начала зависать. После профилирования мы практически уверены, что при импорте нарушили целостность данных, которая обеспечивается на уровне приложения. Однако схема данных сложная, поэтому понять ее мы пока не можем, исходных кодов не имеем.

Мы выяснили, что один из запросов при выполнении вылетает по таймауту (ошибка появляется в логах IIS, увеличение времени ожидания отклика ни к чему не приводит). SQL профайлер показал, что запрос выполняется 30 секунд, после этого завершается с результатом Abort.
В то же время, тот же самый запрос, выполненный в среде SQL Management Studio, выполняется за 0 сек.

Вопрос: что может вызывать такое поведение?


Версия сервера: Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
3 окт 13, 11:03    [14916808]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
k0rw1n
Господа, добрый день. Небольшая предыстория: наша компания приобрела ECM систему. На этапе внедрения CRM модуля мы импортировали большое количество данных из старой CRM системы с помощью скриптов, использующих встроенный в эту систему фреймвок. После импорта данных при выполнении определенных действий (например, создании звонка) система начала зависать. После профилирования мы практически уверены, что при импорте нарушили целостность данных, которая обеспечивается на уровне приложения. Однако схема данных сложная, поэтому понять ее мы пока не можем, исходных кодов не имеем.

Мы выяснили, что один из запросов при выполнении вылетает по таймауту (ошибка появляется в логах IIS, увеличение времени ожидания отклика ни к чему не приводит). SQL профайлер показал, что запрос выполняется 30 секунд, после этого завершается с результатом Abort.
В то же время, тот же самый запрос, выполненный в среде SQL Management Studio, выполняется за 0 сек.

Вопрос: что может вызывать такое поведение?


Версия сервера: Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

А скрипты данного фреймворка предусматривают перенос индексов? Или только структура таблиц и данные?
3 окт 13, 11:05    [14916816]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Скрипты пишутся на C#. Мы брали результаты SQL запроса в БД старой CRM, строили объекты новой системы, сохраняли ее же методами. Видимо, после создания объектов, нужно было создать связанные объекты истории (проблема с таблицей EntityActionHistory), чего мы не знали и не сделали. Поэтому, видимо, система не может корректно построить объект. И поддержки у нас к сожалению нет.

Разные результаты запроса на одной и той же БД, с одной и той же таблицей. Меня смущает именно такое поведение. И для дальнейших поисков нужно понять его причины.
3 окт 13, 11:13    [14916877]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6175
k0rw1n
Разные результаты запроса на одной и той же БД, с одной и той же таблицей. Меня смущает именно такое поведение. И для дальнейших поисков нужно понять его причины.

http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
3 окт 13, 11:19    [14916932]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Сон Веры Павловны, спасибо за статью, очень интересно. Только видимо несколько не то. Запрос не выполняется медленнее, он не выполняется вообще. Максимальное время, которое мы ставили - 1 час. Он выпал по таймауту точно так же. Кроме этого, весь час процесс sqlservr.exe полностью загружал одно из ядер сервера.

Господа, есть еще мысли?
Я сейчас попробую написать тестовое приложение, которое выполняет этот запрос, может это что нибудь даст.
3 окт 13, 14:50    [14918810]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Glory
Member

Откуда:
Сообщений: 104751
k0rw1n
Запрос не выполняется медленнее, он не выполняется вообще.

А где вы мониторите собственно прогресс выполнения запроса ?
3 окт 13, 14:55    [14918851]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
я не спец в асп,но проверте сеты которые выставляет при соедениеи одно и другой приложение. Так же посмотрете как транзакции организованны в студии и в вашем асп - може ввы все завернули в одну громандную транзакцию ?
3 окт 13, 14:56    [14918875]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Glory
k0rw1n
Запрос не выполняется медленнее, он не выполняется вообще.

А где вы мониторите собственно прогресс выполнения запроса ?


SQL Server Profiler
3 окт 13, 15:09    [14918970]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Glory
Member

Откуда:
Сообщений: 104751
k0rw1n
Glory
пропущено...

А где вы мониторите собственно прогресс выполнения запроса ?


SQL Server Profiler

SQL Server Profiler показывает прогресс выполнения запросов ??? И давно ?
3 окт 13, 15:10    [14918978]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Glory
k0rw1n
пропущено...


SQL Server Profiler

SQL Server Profiler показывает прогресс выполнения запросов ??? И давно ?


Простите, неверно прочитал, прогресс конечно же нигде не смотрю. Считаете, что часа недостаточно и я просто не дождался?
3 окт 13, 15:12    [14918998]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Glory
Member

Откуда:
Сообщений: 104751
k0rw1n
Простите, неверно прочитал, прогресс конечно же нигде не смотрю. Считаете, что часа недостаточно

Вы путаете понятия. Мне может быть достаточно, чтобы запрос выполнился за 5 секунд. А вот серверу - кто знает.
Если вас не устраивает производительность запроса, то начинают с анализа простых вещей
- план выполнения
- загрузка ресурсов
- блокировки
3 окт 13, 15:14    [14919021]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Glory, дело в том, что мы практически уверены в том, что мы нарушили целостность данных приложения. И одним их признаков является зависание системы на этом запросе.
Возможно, запрос не выполняется, потому что таблица в состоянии блокировки.
Возможно, потому что приложение зависает сразу после отправки запроса. Я не знаю, я могу только фантазировать.
Поэтому я обратился за помощью к вам: какие еще варианты могут быть?

На дампе без импорта этот запрос работает точно также, как и в SSMS.
3 окт 13, 15:24    [14919119]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Glory
Member

Откуда:
Сообщений: 104751
k0rw1n
Поэтому я обратился за помощью к вам: какие еще варианты могут быть?

Ну так не надо фантазировать. Надо мониторить, что прроисходит на сервере.
3 окт 13, 15:51    [14919416]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Гость333
Member

Откуда:
Сообщений: 3683
k0rw1n
Возможно, запрос не выполняется, потому что таблица в состоянии блокировки.
Возможно, потому что приложение зависает сразу после отправки запроса. Я не знаю, я могу только фантазировать.

Вот вам простейший запрос для мониторинга:
exec sp_who2 <spid>

Вместо <spid> подставьте номер сессии, в которой выполняется долгоиграющий запрос. Если в поле BlkBy увидите какое-то число — значит, другая сессия блокирует ваш запрос.
Запустив sp_who2 несколько раз, понаблюдайте, изменяется ли значение CPUTime. Если растёт — то запрос выполняется.

А то как-то опрометчиво утверждать, что если запрос не выполнился за 1 час, то он не выполняется вообще. По вашим сообщениям видно, что запрос выполнялся и не был заблокирован ("весь час процесс sqlservr.exe полностью загружал одно из ядер сервера").

Поэтому штудируйте предложенную статью, сравнивайте планы запросов в SSMS и в приложении, исправляйте по изложенным в статье методикам.
3 окт 13, 16:13    [14919660]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
Гость333
Member

Откуда:
Сообщений: 3683
k0rw1n,

Или вы попробовали всё, что предложено в статье, но ничего не помогло? Тогда опишите, что именно пробовали и к чему это привело.
3 окт 13, 16:15    [14919675]     Ответить | Цитировать Сообщить модератору
 Re: Разные результаты выполнения запроса в приложении ASP и среде MS SQL Manager  [new]
k0rw1n
Member

Откуда:
Сообщений: 7
Гость333
k0rw1n,

Или вы попробовали всё, что предложено в статье, но ничего не помогло? Тогда опишите, что именно пробовали и к чему это привело.


Испробовал не все. Статья для меня сложновата. Попробовал SET ARITHABORT OFF - разницы нет.

Гость333
Вот вам простейший запрос для мониторинга:
exec sp_who2 <spid>

Вместо <spid> подставьте номер сессии, в которой выполняется долгоиграющий запрос. Если в поле BlkBy увидите какое-то число — значит, другая сессия блокирует ваш запрос.
Запустив sp_who2 несколько раз, понаблюдайте, изменяется ли значение CPUTime. Если растёт — то запрос выполняется.

А то как-то опрометчиво утверждать, что если запрос не выполнился за 1 час, то он не выполняется вообще. По вашим сообщениям видно, что запрос выполнялся и не был заблокирован ("весь час процесс sqlservr.exe полностью загружал одно из ядер сервера").


Спасибо всем огромное, буду тестировать, но уже в завтра.
3 окт 13, 16:33    [14919816]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить