Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
Нужно поместить сложный запрос во view. Это ограничение сторонней системы. 1. Можно сделать табличную функцию, где заполняется нескольких табличных переменных и происходит join. Такая функция сначала построит весь набор данных и view будет фильтроваться по нему. Так работает быстро на небольшом числе записей, но их количество скоро вырастет. 2. Можно сделать inline функцию или cte из нескольких частей внутри view. Но select из такого view уже выполняется долго даже на малом числе записей. Как хинтами или ещё как-то указать оптимизатору, что нужно нечто вроде spool на каждую часть cte для эмуляции варианта №1 внутри варианта №2? Чтобы эту конструкцию поместить во view и фильтры во where могли бы ограничивать хотя бы частично число исходных данных для join, а не готовый результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 11:12 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknownКак хинтами или ещё как-то указать оптимизатору, что нужно нечто вроде spool на каждую часть cte для эмуляции варианта №1 внутри варианта №2? Чтобы эту конструкцию поместить во view и фильтры во where могли бы ограничивать хотя бы частично число исходных данных для join, а не готовый результат. Рекурсией из одного шага ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 12:13 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
Правильно написанный вариант 1 будет работать всегда и быстро. Это следствие тривиального умозаключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 13:16 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
RankatanРекурсией из одного шагаНе могу догадаться как :-( aleks222Правильно написанный вариант 1 будет работать всегда и быстро.Если функция собирает миллион записей, хотя нужно всего 10 по условию, то как она будет быстрой? Или оптимизатор умеет пробрасывать внешнее условие в неинлайновую функцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:09 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknown, умеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:14 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
TaPaKумеетГде почитать? У меня не выходит написать неинлайновую функцию, чтобы внешний параметр учитывался внутри неё. Код: sql 1. 2. Все показатели в профилере различаются не более, чем на 0.03% включая reads. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:31 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknown, извинямс, то я неправильно прочтиал :) Так конечно не умеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:34 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:38 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
Rankatan Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Спасибо, помогло. По крайней мере запрос не обёрнутый во view ускорился существенно. Хотя в документации spool в CTE упоминается только относительно remote server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:51 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknown, Если вам непременно нужна фильтрация до соединения, то это делается гораздо проще и без хинтов и манипуляций с рекурсией: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 17:20 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknownПо крайней мере запрос не обёрнутый во view ускорился существенно. Хотя в документации spool в CTE упоминается только относительно remote server.Обёрнутый во view запрос с CTE тормозит. Все Eager Spool вернулись в Lazy Spool. Однако, обёрнутый в инлайн-функцию сохранил Eager Spool в плане, фильтрует по внешнему условию в самом начале и работает быстро. Не может ли такое (недокументированное?)поведение измениться в очередном SP/CU? У меня 12.0.5557.0 (X64) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 17:30 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
invm Если вам непременно нужна фильтрация до соединения, то это делается гораздо проще и без хинтов и манипуляций с рекурсиейМне нужна не только фильтрация, но и Eager Spool. Запрос достаточной развестый, работал быстро только в процедуре или в неинлайновой функции с табличными переменными. top (9223372036854775807) попробую на всякий случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 17:33 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknownМне нужна не только фильтрация, но и Eager SpoolНе нужен вам Eager Spool. С точки зрения дальнейшего потребления данных другими итераторами, он ничем не отличается от Lazy. План нужно анализировать и искать причину тормозов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 17:49 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
invmНе нужен вам Eager Spool. С точки зрения дальнейшего потребления данных другими итераторами, он ничем не отличается от Lazy. План нужно анализировать и искать причину тормозов.В запросе несколько вложенных CTE, join на самих себя, по некоторым делается сложение текста через xml и т.д. Естественно, он тормозит без "материализации". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 17:54 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknown, CTE не материализуется в том смысле, который вы вкладываете в это понятие. Сколько раз оно упомянуто в запросе, столько и будет выполнено. Короче, это просто синтаксический сахар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 18:24 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
invmtunknown, CTE не материализуется в том смысле, который вы вкладываете в это понятие. Сколько раз оно упомянуто в запросе, столько и будет выполнено. Короче, это просто синтаксический сахар. Там можно добиться, чтобы формировался spool через рекурсию и потом в остальных запросах обращение происходило именно к этому сформированному spool, но сейчас сходу не смог сделать пример, надо экспериментировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 11:46 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknowninvmНе нужен вам Eager Spool. С точки зрения дальнейшего потребления данных другими итераторами, он ничем не отличается от Lazy. План нужно анализировать и искать причину тормозов.В запросе несколько вложенных CTE, join на самих себя, по некоторым делается сложение текста через xml и т.д. Естественно, он тормозит без "материализации". И так же естественно, что select into - это не для тредстартера. Тредстартер мечтает о ms sql c телепатической системой управления... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 14:00 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
RankatanТам можно добиться, чтобы формировался spool через рекурсию и потом в остальных запросах обращение происходило именно к этому сформированному spool, но сейчас сходу не смог сделать пример, надо экспериментировать. это было бы достойно отдельной статьи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 14:45 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
RankatanТам можно добиться, чтобы формировался spool через рекурсию и потом в остальных запросах обращение происходило именно к этому сформированному spool, но сейчас сходу не смог сделать пример, надо экспериментировать. ни разу такого не видел, очень интересно посмотреть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2018, 15:14 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
RankatanТам можно добиться, чтобы формировался spool через рекурсию и потом в остальных запросах обращение происходило именно к этому сформированному spool, но сейчас сходу не смог сделать пример, надо экспериментировать.При внешней фильтрации по такой "материализуемой" функции Eager Spool выживает не всегда. Иногда сваливается в Lazy, видимо, в зависимости от совпадения фильтра с индексами. При этом сваливании производительность хотя и падает, но остаётся приличной. Кстати, откуда такой метод? Личные эксперименты, документация или чей-то опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 09:10 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknown, Вы добьетесь только того, что при очередном обновлении сервера Ваши конструкции улетят в корзину. Пересмотрите архитектуру данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 12:06 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknownПри внешней фильтрации по такой "материализуемой" функции Eager Spool выживает не всегда. Иногда сваливается в Lazy, видимо, в зависимости от совпадения фильтра с индексами.Продолжаете упорствовать? Читайте до полного понимания - Eager Spool и Lazy Spool . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 13:11 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовtunknown, Вы добьетесь только того, что при очередном обновлении сервера Ваши конструкции улетят в корзину. Пересмотрите архитектуру данных.Возможность ломающего обновления меня огорчает. Но другого решения мне не видно. invmПродолжаете упорствовать? Читайте до полного пониманияПрочитал. Lazy спулит только необходимые записи, Eager весь указанный набор данных, в моём случае- каждую вложенную CTE. Такой костыль в моём случае превращает синтаксический сахар в физическую "материализацию". План+профилер подтверждают многократное ускорение. Работа с основной таблицей не предусматривает update/delete, только нечастые insert. Предполагаю, что упомянутые по ссылкам проблемы в моём случае имеют низкий приоритет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 16:22 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
tunknownПрочитал. Lazy спулит только необходимые записи, Eager весь указанный набор данныхПлохо прочитали. Спулят они одно и то же, только eager все сразу, а lazy постепенно. tunknownПлан+профилер подтверждают многократное ускорение.Если план отличается только типом конкретного спула , ни о каком многократном ускорении речи быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 17:14 |
|
||
|
Принудительный spool
|
|||
|---|---|---|---|
|
#18+
invmПлохо прочитали. Спулят они одно и то же, только eager все сразу , а lazy постепенно.Это и нужно. invmЕсли план отличается только типом конкретного спула , ни о каком многократном ускорении речи быть не может.План развесистый, он отличается кроме Lazy<->Eager некоторыми перестановками операторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 17:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39695146&tid=1688279]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 561ms |

| 0 / 0 |
