Size: a a a

SqlCom.ru - уголок MS SQL

2021 June 07

at

al t in SqlCom.ru - уголок MS SQL
если where убираю и ставлю вместо него option - то все ок,
если option после where - ошибка
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
queryruleoff - недокументированная опция и требует для применения сисадминских полномочий.
Повторюсь - не трогайте этот спул.
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Текст ошибочного запроса покажите
источник

oa

oleg aronov in SqlCom.ru - уголок MS SQL
Хинт option (no_performance_spool) должен убрать спул, но не похоже, что запросу от этого станет лучше
источник

DI

Dmitriy Ivanov in SqlCom.ru - уголок MS SQL
Не понимание того, что делает spool непременно приведет к ухудшению ситуации. Простыми словами, этот оператор используется чтобы не гонять массив данных туда-сюда.
Послушайте советы выше. Не трогайте, оно без вас разберётся лучше.
источник

at

al t in SqlCom.ru - уголок MS SQL
мне не совсем понятно, в чем профит использовать tempdb в моем случае
вот фрагмент кода и фрагмент плана запроса
в таблице const value 700 записей, из которых используется всего 3; далее используя эти три значения получаем одно - status

я ведь правильно понимаю, что все эти статусы (650к штук) кладутся в tempd?
источник

at

al t in SqlCom.ru - уголок MS SQL
источник

at

al t in SqlCom.ru - уголок MS SQL
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
В плане у вас показан внутренний вход оператора Nested Loops, где таблица const_value сканируется один раз - на выходе 3 строки.
Затем эти 3 строки агрегируются, получается одна строка, которая помещается в спул.
Далее оператор Nested Loops почти 700000 раз считывает эту строку из спула.
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Если убрать спул, таблица const_value будет 700000 раз сканироваться и агрегироваться.
источник

at

al t in SqlCom.ru - уголок MS SQL
навел мышкой на table spool
actual number of rows - это кол-во строк, которое прочитали из спула, а не которое хранится в спуле?
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Да, сколько прочитано
источник

at

al t in SqlCom.ru - уголок MS SQL
тогда все действительно нормально

А кост 12% - это нормально для одной строки в спуле?
источник

at

al t in SqlCom.ru - уголок MS SQL
или тут получается, что сколько есть - столько есть, зависит лишь от того, как много раз используем данные из спула?
источник

ММ

Михаил Миронов (griz... in SqlCom.ru - уголок MS SQL
а у тебя всегда там мало строк будет?
источник

at

al t in SqlCom.ru - уголок MS SQL
да
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Стоимость - относительный интегральный показатель и зависит от множества факторов, а не только от количества строк. И означает оценочную долю ресурсов, необходимую для выполнения этого оператора относительно всего плана (100%).
Ориентироваться на это значения не имеет особого смысла.
Грубо "нормальность" всего плана можно оценить по значению свойства "Reason For Early Termination Of  Statement Optimization" корневого оператора плана. Если там "GoodEnoughPlanFound", значит нормально
источник

at

al t in SqlCom.ru - уголок MS SQL
А если "Reason For Early Termination Of  Statement Optimization" просто нет?
источник

АР

Александр Ройтман... in SqlCom.ru - уголок MS SQL
Видимо не там смотрите
источник

O

Oleg T in SqlCom.ru - уголок MS SQL
У тебя этот спул, эти три строки, джойнятся с набором данных с существенно большим количеством строк, потому имеет место умножение. Не будь спула это было бы чёртова куча чтений из того фуллскана, что справа ниже по дереву плана. В целом к этой части плана претензий нет. Если хочешь улучшить план - посмотри на ветку, что выше - почему там много строк в соединении или много ли? Как соотносится число записей на выходе джойна с числом на оных на входе? Можно ли свести Nested Loop к Merge Join что сократит число чтений, кажется, втрое?
источник