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

Откуда: Москва
Сообщений: 1176
Делается
delete from TTT where Data < @Data
.

оптимизатор на столько сильно мажет с количеством ожидаемых строк, что возникает ощущение, что он даже не пытается обновить устаревшую статистику и план перед выполнением.

я не туда смотрел, или для "тривиального плана" есть такое дело?
14 окт 15, 13:32    [18277515]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Mike_za
он даже не пытается обновить устаревшую статистику и план перед выполнением.
Это же не дело оптимизатора - обновлять статистику.

Настройте автообновление статистики, либо обновляйте её сами, по расписанию.
14 окт 15, 13:34    [18277535]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
o-o
Guest
Mike_za
Делается
delete from TTT where Data < @Data
.

это переменная или параметр?
для переменной стандартная оценка 30%
14 окт 15, 13:59    [18277774]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Mike_za
я не туда смотрел, или для "тривиального плана" есть такое дело?


К сообщению приложен файл. Размер - 35Kb
14 окт 15, 14:18    [18277915]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
если с опшн рекомпайл выдает такое же ожидаемое кол-во, то дело скорее всего в статистике, если лучше, то дело в @Data

Mike_za
Делается
delete from TTT where Data < @Data
.

оптимизатор на столько сильно мажет с количеством ожидаемых строк, что возникает ощущение, что он даже не пытается обновить устаревшую статистику и план перед выполнением.

я не туда смотрел, или для "тривиального плана" есть такое дело?
14 окт 15, 14:27    [18277999]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Mike_za
я не туда смотрел, или для "тривиального плана" есть такое дело?
http://www.somewheresomehow.ru/optimizer-part-2-trivial-plan-optimization/
14 окт 15, 15:06    [18278325]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Спасибо
14 окт 15, 22:03    [18280200]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Mike_za,

Тривиальный план может использовать статистику (для отображения числа строк, например), но не принимает решений на ее основе.
Т.е. если план тривиальный ТС должно быть не важно, как промахивается или нет оптимизатор, т.к. это не может влиять на выбор и соответственно форму плана и значит на его производительность. Там уже должны работать другие факторы - блокировки, железо и т.д.

Что такое травильный план - вопрос, кстати, довольно интересный, я его изучал и пришел к выводу, что это некая оптимизация, которая применяется сиквелом к дереву запроса. Когда он распарсил и упростил запрос, он на раннем этапе применяет правила реализации, и если структура дерева подходит под ту, что описана в правиле - то считается, что запрос может быть выполнен единственно хорошим (но не обязательно единственно возможным) способом, правило применяется и результатом становится дерево физических операторов, которое трансформируется в план запроса, который отмечается как тривиальный.

Если отключить конкретное правило, которое работает для этой версии тривиального плана - будет полная оптимизация.
Пример:
+
select number,name into #t from master..spt_values;
go
select * from #t;
go
dbcc freeproccache;
go
dbcc ruleoff('GetToTrivialScan');
go
select * from #t;
go
dbcc ruleon('GetToTrivialScan');
go
drop table #t;


К сообщению приложен файл. Размер - 36Kb
18 окт 15, 17:40    [18293895]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
SomewhereSomehow, спасибо!
18 окт 15, 17:46    [18293907]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Mike_za,

Пожалуйста.

А вопрос про тривиальный план действительно интересный!

Например, если порог стоимости параллелизма 0, то тривиальный план не может быть получен.
select number,name into #t from master..spt_values;
go
dbcc freeproccache;
go
sp_configure 'cost threshold for parallelism', 0;
reconfigure;
go
select * from #t;
go
sp_configure 'cost threshold for parallelism', 5;
reconfigure;
go
drop table #t;

Картинка с другого сайта.

Или, тривиальный план может быть довольно сложным! Вот пример, скриншот, из моего доклада на Сиквел Ралли в 2012 году - план на картинке - тривиальный!
Картинка с другого сайта.

Т.е. тривиальный, не обязательно простой или единственно возможный, тривиальный - лучший с точки зрения разработчиков сиквела. Интересно было бы посмотреть пример, когда тривальный план - не лучший план, если такой есть.

Я пока такого не встречал, хота специально и не искал. Если у кого-то есть такой пример, буду благодарен, если пришлете.
18 окт 15, 18:20    [18293966]     Ответить | Цитировать Сообщить модератору
 Re: тривиальный план и обновление статистики  [new]
Rubin_Attack
Member

Откуда:
Сообщений: 64
Mike_za,
чувак, если это ты, то скинь свой скайп или id вк на allspam@nm.ru )
30 ноя 15, 17:58    [18493628]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить