powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура залипает на простом скрипте
13 сообщений из 13, страница 1 из 1
Процедура залипает на простом скрипте
    #39672951
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Помогите понять в чем может быть следующая проблема.

Сервер - Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64)
Есть процедура, которая начинается со следующей простой выборки:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IF OBJECT_ID(N'tempdb..#NewOutlets', N'U') IS NOT NULL
	DROP TABLE #NewOutlets;
-- Список новых ТТ из tblOutLets, которых еще нет в таблице логов OutletsAudit
SELECT tol.Cust_id, tol.OL_id 
INTO #NewOutlets
FROM dbo.tblOutLets AS tol 
WHERE tol.DLM BETWEEN @DateFrom AND @DateTo
EXCEPT
SELECT oa.Cust_id, oa.OL_id 
FROM dbo.OutletsAudit AS oa;



Суть этой выборки - найти список строк в tblOutLets, который по заданным столбцам отсутствует в OutletsAudit.

Если подствить нужный мне период в выборку из первой таблицы, то я получаю результат в размере ~315 тыс строк.
Если выполнить отдельно второй запрос, то получаю результат в размере ~290 тыс строк.
Если выполнить целиком c EXCEPT, то получаю результат в размере ~43 тыс строк. При этом время выполнения составляет
Код: plaintext
CPU time = 922 ms,  elapsed time = 5233 ms.
План выполнения этой выборки во вложении "1.sqlplan"


Если запустить выполнение этого куска кода в рамках процедуры, то у меня процедура залипает на этом участке и висит бесконечно. Растет CPU, количество чтений в пределах 10-15.
Это не всегда так. Данная проблема у меня впервые появилась на тестовой среде и тогда я ничего не смог поделать с ней (сбрасывал кеши планов, запускал процедуру с рекомпиляцией) и только пересоздание процедуры решило проблему.
Сейчас эта проблема всплыла на продуктиве у клиента. Вариант - удалить и заново создать не вариант. Надо понять причину такого поведения.
План выполнения той же выборки, но запущенной в рамках процедуры "2.sqlplan"

Очень интересная картина выходит по планам. В первом случае видно, как он тянет много строк, а во втором ничего.


Спасибо!

P.S. Не судите строго, но я не смог понять, как приложить 2 плана по отдельности, поэтому архивом приатачил.
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672956
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672962
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мщдя... а то что у вас разные запросы никого не волнует ?? да и в обоих случаях у вас просят создать нужный индекс ?
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672963
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и сравнивать Actual vs Estimate из рвзных мест это всегда весело.

авторОчень интересная картина выходит по планам. В первом случае видно, как он тянет много строк, а во втором ничего.

a NL vs Hash вас не смутил... в общем курите ссылку
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672969
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxxмщдя... а то что у вас разные запросы никого не волнует ?? да и в обоих случаях у вас просят создать нужный индекс ?
Вы о том, что я убрал INTO в первом варианте?
Вот вместе с INTO план во вложении

Индексы могу создать, но что они мне дадут в данном случае кроме ускорения? К примеру, текущая скорость меня устраивает.
Или они решат мою проблему?
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672972
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKну и сравнивать Actual vs Estimate из рвзных мест это всегда весело.

авторОчень интересная картина выходит по планам. В первом случае видно, как он тянет много строк, а во втором ничего.

a NL vs Hash вас не смутил... в общем курите ссылку
Спасибо за ссылку. Сейчас буду пытаться разобраться.
Что касается планов, то первый я получил актуальный после обычной выборки, а второй взял из процедуры sp_WhoIsActive (Adam Machanic). Эта процедура разве Estimate план выдает? Только что проверил свою процедуру на другом сервере и там sp_WhoIsActive нарисовал план с большим потоком данных в отличии от того, что на продуктиве сейчас, где по 1 строке возвращает.
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672976
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKa NL vs Hash вас не смутил... в общем курите ссылку
Моих знаний на текущий момент недостаточно, чтобы понять почему при обычной выборке он решил использовать Hash match, а внутри процедуры NL...
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39672987
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39673048
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищ TaPak натолкнул на мысль о разнице между физическим соединением.
Я не любитель использовать OPTION, привык, что SQL сам найдет правильное решение, но в данном конкретном случае явно указал для своего скрипта внутри процедуры
Код: sql
1.
OPTION (HASH JOIN)



После этого процедура выполнилась быстро и правильно.


Еще я попробовал перед запуском процедуры обновить статистику для указанных 2-х таблиц и после запускать процедуру.
Результата ноль.
Далее я взял и запихнул обновление статистики по 2-м таблицам в саму процедуру перед выполнением своей выборки.
Результат - процедура выполнилась быстро и правильно.

Для меня эта мистика какая-то.
Буду читать ваши ссылки, может чего пойму...
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39673051
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
otets1988Товарищ TaPak натолкнул на мысль о разнице между физическим соединением.
Я не любитель использовать OPTION, привык, что SQL сам найдет правильное решение, но в данном конкретном случае явно указал для своего скрипта внутри процедуры
Код: sql
1.
OPTION (HASH JOIN)



После этого процедура выполнилась быстро и правильно.


Еще я попробовал перед запуском процедуры обновить статистику для указанных 2-х таблиц и после запускать процедуру.
Результата ноль.
Далее я взял и запихнул обновление статистики по 2-м таблицам в саму процедуру перед выполнением своей выборки.
Результат - процедура выполнилась быстро и правильно.

Для меня эта мистика какая-то.
Буду читать ваши ссылки, может чего пойму...

Чудес нет.

Есть разные
Код: sql
1.
DBCC USEROPTIONS


для ваших подключений.
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39673065
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Мы вроде бы на одном языке общаемся, но я многое не понимаю ))
Жизнь боль, а эффект Даннинга-Крюгера сила.
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39673082
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
otets1988,

прибить хешем это конечно агонь. Но статью вы решили не открывать...
...
Рейтинг: 0 / 0
Процедура залипает на простом скрипте
    #39673103
otets1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKotets1988,
прибить хешем это конечно агонь. Но статью вы решили не открывать...
С чего вы решили, что я статью решил не открывать?
Если бы она была короткой, то я бы ее сразу прочитал, а так как она очень приличного размера, а решить проблему надо было немедленно, то я решил что-то сперва делать. Пусть это будет сейчас затычка без понимания сути.
Но зато я теперь могу спокойно попытаться разобраться в сути пока затычка стоит и не давит на меня.

otets1988Буду читать ваши ссылки, может чего пойму...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура залипает на простом скрипте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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