powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ухудшение производительности запросов с in ( .. )
27 сообщений из 27, показаны все 2 страниц
Ухудшение производительности запросов с in ( .. )
    #38996690
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.

В последнее время ряд запросов в Management Studio перестал выполняться. Речь идет о запросах с перечислением большого количества значений в in ( ... )

Пример:

select * from clientdata where dtdelete is null and regno in ( ... ) order by regno asc
- выдает ошибку "Сообщение 8632, уровень 17, состояние 2, строка 1 - Внутренняя ошибка: был достигнут предел служб выражений. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить."

select c.regno, convert(varchar, s.dtopen, 104) from ClientData c join ClientScheta s on c.FID=s.posc where c.dtdelete is null and c.regno in ( ... ) order by regno asc
- выдает ошибку "Сообщение 8623, уровень 16, состояние 1, строка 1 - Обработчик запросов исчерпал внутренние ресурсы, и ему не удалось предоставить план запроса. Это редкое событие, которое может происходить только при очень сложных запросах или запросах, которые обращаются к очень большому числу таблиц или секций. Упростите запрос. Если предполагается, что это сообщение получено по ошибке, свяжитесь со службой поддержки для получения дополнительных сведений."

Раньше подобные запросы выполнялись нормально для 100 000+ значений в in, а сейчас не хотят даже с ~60 000... Предела оперативной памяти в момент выполнения запроса сервер не достигает. С чем может быть связано такое ухудшение производительности и как решить данную проблему? Версия SQL - Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996694
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitС чем может быть связано такое ухудшение производительности
С тем, что в хелпе заранее предупредили

Including an extremely large number of values (many thousands) in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996695
IN-список откуда и как формируется? что мешает засунуть его в таблицу (табличную переменную, врменную таблицу) и сделать JOIN вместо IN ?
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996696
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbit100 000+ значений в inСилён... а во временную таблицу их скинуть не хочешь?
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996700
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхIN-список откуда и как формируется? что мешает засунуть его в таблицу (табличную переменную, врменную таблицу) и сделать JOIN вместо IN ?Зачем JOIN?
IN, но только IN(SELECT....)
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996712
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitС чем может быть связано такое ухудшение производительности и как решить данную проблему? Версия SQL - Microsoft SQL Server 2012 - 11.0.2100.60 (X64)Связано с изменением оптимизатора, компилятора.

Решить можно переписыванием запроса. Например, вставлять эти значения во временную таблицу. Вряд ли эти "100 000+ значений в in" набирались руками, так что наверное несложно переписать.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996718
iap,

не любли IN-subquery ещё с тех пор, когда оптимизатор сам не умел их "разворачивать" в джойны.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996722
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заставляет задуматься о соответствии программиста его занимаемой должности...
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996723
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхiap,

не любли IN-subquery ещё с тех пор, когда оптимизатор сам не умел их "разворачивать" в джойны.В списке может оказаться не по одному экземпляру некоторых значений...
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996755
iap,


distinct никто не отменял. как на список перед вставкой в таблицу, так и при джойне на селект из таблицы-списка или на результат всего джойна.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996770
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эхiap,


distinct никто не отменял. как на список перед вставкой в таблицу, так и при джойне на селект из таблицы-списка или на результат всего джойна.А чем это лучше?
DISTINCT - гарантия торможения запроса
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996772
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, IN() я тоже не люблю.
Всегда пишу EXISTS()
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996796
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за информацию. Со временными таблицами логично, так в итоге и сделал. Хотел просто понять, почему то, что раньше выполнялось без проблем, выполняться вдруг перестало.

Владислав КолосовЗаставляет задуматься о соответствии программиста его занимаемой должности...

Никогда такой должности не занимал и не планирую.)
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996803
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitХотел просто понять, почему то, что раньше выполнялось без проблем, выполняться вдруг перестало.
Потому что "Including an extremely large number of values "
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996807
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

Раньше точно такой же запрос с еще большим "number of values" выполнялся без проблем.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996809
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitGlory,

Раньше точно такой же запрос с еще большим "number of values" выполнялся без проблем.
Ну так вернитесь во времени назад
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996817
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitРаньше точно такой же запрос с еще большим "number of values" выполнялся без проблем.
У меня тут давеча соседка померла. До того 75 лет прожила, и ни разу с ней раньше такой фигни не случалось...
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996818
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitGlory,

Раньше точно такой же запрос с еще большим "number of values" выполнялся без проблем.

Я еще в 2006-2007 году делал оптимизации, где подобные IN валились по ошибке и приходилось, если число ID-шнишников выше разумной величины, класть их во временную таблицу и оттуда IN (SELECT ID FROM #T). И валилось это дело уже где-то после 500-1000 значений. Там скрипт длинный собирался динамически.

Если вам надо их непременно вставить в скрипт, то вставляйте порциями через VALUES по 50-100 шт, потом на эту таблицу In (а лучше JOIN). Таким способом можно больше передать в запросе. И об индексе надо подумать.

Но, ИХМО, что-то у вас не так архитектурно.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996849
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaPROrabbitРаньше точно такой же запрос с еще большим "number of values" выполнялся без проблем.
У меня тут давеча соседка померла. До того 75 лет прожила, и ни разу с ней раньше такой фигни не случалось...
Если померла, значит были на то причины (болезнь, критический износ комплектующих). У нашего сервера подобных проблем не наблюдается.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996851
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitУ нашего сервера подобных проблем не наблюдается.
Вам еще раз процитировать хелп ?
Including an extremely large number of values (many thousands) in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table.

У вас есть many thousands, как вы думате ?
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996859
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

Я читал и хелп и множество других вещей на этот счет. Суть проблемы заключается в том, что при визуально идентичных ситуациях имеется разный результат. При неизменной структуре БД и 100% идентичных запросах месяц назад мы имели успешную отработку, а сегодня ошибку.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996860
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitЯ читал и хелп и множество других вещей на этот счет. Суть проблемы заключается в том, что при визуально идентичных ситуациях имеется разный результат. При неизменной структуре БД и 100% идентичных запросах месяц назад мы имели успешную отработку, а сегодня ошибку.
Ваши рассуждения из серии - я всегда здесь переходил дорогу, а сегодня меня тут сбила машина.
Сервер использовал свое право "can consume resources and return errors 8623 or 8632"
Какая еще суть вам нужна ?
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996881
PROrabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,

Если возникла проблема, стоит разобраться почему именно. Если сервер вдруг "воспользовался правом", значит у него на это были причины. Можно сказать, что на это "воля господня" и не разбираться в проблеме, а можно попытаться найти моменты, которые изменились, будь то процент выделения процессорного времени, версия обновления сервера, изменение конфигурации и т.д... Вот я и хочу понять, в какую сторону копать.
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #38996887
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROrabbitЕсли возникла проблема, стоит разобраться почему именно.
Разумеется. Причина - это large number of values.

PROrabbitЕсли сервер вдруг "воспользовался правом", значит у него на это были причины.
Вы можете начать поиск этих причин.
Только зачем, если запрос все равно придется перписать ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ухудшение производительности запросов с in ( .. )
    #39857941
yourij_mw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TRACEFLAG 8780 - дает дополнительное время на поиск плана.

мне помогло!!
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #39858026
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yourij_mw TRACEFLAG 8780 - дает дополнительное время на поиск плана.

мне помогло!! Костыль? Ай-яй-яй!
...
Рейтинг: 0 / 0
Ухудшение производительности запросов с in ( .. )
    #39858171
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yourij_mw TRACEFLAG 8780 - дает дополнительное время на поиск плана.

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


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