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

Откуда:
Сообщений: 407
Я заметил что при определенных параметрах запроса (период данных) SQL 2019 (база в режиме совместимости с 2008) дает кривой Live plan
См приложенный скрин, такое впечатление что он не знает какое количество записей предстоит обработать.
Видимо нужно принудительное обновление статистики хотя флаг Т2371 установлен.
Вопрос - кто сталкивался с подобным и какие средства борьбы?

К сообщению приложен файл. Размер - 51Kb
25 ноя 21, 12:51    [22400646]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9157
selis76,

не используйте табличные переменные.
25 ноя 21, 13:28    [22400674]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
0wl
Member

Откуда:
Сообщений: 100
selis76,

Судя по фразе "при определенных параметрах запроса" - это больше похоже на Parameter Sniffing

Пересчёт статистик поможет, но только тем, что после этого будет построен новый план. Возможно, он будет оптимален для "определённых параметров", но так же возможно, что он будет неоптимален для всех остальных.

Я бы посмотрел на то, чем отличаются значения параметров в случаях, когда всё хорошо и всё плохо. Возможно, для "плохих" параметров можно как-то намеренно поменять текст запроса (например, поменять местами порядок колонок), чтобы для них строился другой план запроса
25 ноя 21, 13:32    [22400676]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
komrad
Member

Откуда:
Сообщений: 5912
0wl
selis76,

Судя по фразе "при определенных параметрах запроса" - это больше похоже на Parameter Sniffing

Пересчёт статистик поможет, но только тем, что после этого будет построен новый план. Возможно, он будет оптимален для "определённых параметров", но так же возможно, что он будет неоптимален для всех остальных.

Я бы посмотрел на то, чем отличаются значения параметров в случаях, когда всё хорошо и всё плохо. Возможно, для "плохих" параметров можно как-то намеренно поменять текст запроса (например, поменять местами порядок колонок), чтобы для них строился другой план запроса


поддержу версию параметр сниффинга

касательно плана - в его свойствах показано для каких параметров он был скомпилирован

кроме того, есть такая штука как "temp table statistics reuse"
это использование статистики по #-таблице от других запросов/сессий
то есть, данные в #-таблице ваши, а статистика по ней - нет

кстати, запрос для сервера становится "новым" даже если в нем дополнительный лишний/незначащий пробел
25 ноя 21, 13:58    [22400691]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9157
komrad,

там в источнике, который автор выбросил из контекста, ожидаема одна строка.
25 ноя 21, 14:36    [22400726]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
komrad
Member

Откуда:
Сообщений: 5912
Владислав Колосов
komrad,

там в источнике, который автор выбросил из контекста, ожидаема одна строка.

вероятно
полный план помог бы понять причину

и в таблице #tt22 тоже ожидание одной строки
25 ноя 21, 14:42    [22400729]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
selis76
Member

Откуда:
Сообщений: 407
Статистику пересчитал без параметров просто update statistics, не помогло. На узком периоде таже картина см скрин
Если смотреть узлы плана запроса видно что Estimated Number of Rows to Be read =1 а на Number of executions = 104732
т.е. получается SQL не может даже предположить сколько записей у него предполагается для данной операции

К сообщению приложен файл. Размер - 120Kb
25 ноя 21, 16:40    [22400813]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
0wl
Member

Откуда:
Сообщений: 100
selis76,

лучше бы приложили весь план в XML

Всё ещё не видно, что происходит справа. Моё предположение - временная таблица без индекса, про которую SQL Server думает, что там всего 1 строка
25 ноя 21, 16:43    [22400815]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
selis76
Member

Откуда:
Сообщений: 407
0wl
selis76,

Судя по фразе "при определенных параметрах запроса" - это больше похоже на Parameter Sniffing

Пересчёт статистик поможет, но только тем, что после этого будет построен новый план. Возможно, он будет оптимален для "определённых параметров", но так же возможно, что он будет неоптимален для всех остальных.

Я бы посмотрел на то, чем отличаются значения параметров в случаях, когда всё хорошо и всё плохо. Возможно, для "плохих" параметров можно как-то намеренно поменять текст запроса (например, поменять местами порядок колонок), чтобы для них строился другой план запроса


Ну как понимаю Paramete sniffing лечится чисткой кэша запросов, но тут она не помогает. Все четко зависит от периода выборки
25 ноя 21, 16:44    [22400816]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
komrad
Member

Откуда:
Сообщений: 5912
selis76

Ну как понимаю Paramete sniffing лечится чисткой кэша запросов, но тут она не помогает. Все четко зависит от периода выборки

в тестовых целях попробуйте выполнить запрос с разными периодами с опцией recompile - этим вы исключите влияние сниффинга
сравните планы выполнения, если они разные

Сообщение было отредактировано: 25 ноя 21, 16:57
25 ноя 21, 16:51    [22400820]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9157
selis76,

вы не там смотрите, ищите справа, где впервые появляется оценка в одну строку. Там или табличная переменная или временная таблица. А лучше прикрепите план.
25 ноя 21, 17:33    [22400846]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
SERG1257
Member

Откуда:
Сообщений: 2931
selis76
Вопрос - кто сталкивался с подобным и какие средства борьбы?
В чем собственно проблема?
Запрос плохо работает, плохой план.
Запрос работает хорошо, не работает Live plan aka SSMS’s Live Query Statistics?
Если последнее то вот статья Brent Ozar на эту тему https://www.brentozar.com/archive/2021/05/whats-the-buggiest-feature-in-sql-server/
25 ноя 21, 18:35    [22400869]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
selis76
Member

Откуда:
Сообщений: 407
SERG1257
selis76
Вопрос - кто сталкивался с подобным и какие средства борьбы?
В чем собственно проблема?
Запрос плохо работает, плохой план.
Запрос работает хорошо, не работает Live plan aka SSMS’s Live Query Statistics?
Если последнее то вот статья Brent Ozar на эту тему https://www.brentozar.com/archive/2021/05/whats-the-buggiest-feature-in-sql-server/

Проблема в том что за период 1 день план запроса плохой вот с таким мегапроцентами, а за 5 дней план запроса хороший.
Это случает на определенных датах. Т.е. меньшая выборка идет по кривому плану с мегапроцентами , мега проценты это уже кривой план MS SQL
25 ноя 21, 19:57    [22400916]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
komrad
Member

Откуда:
Сообщений: 5912
selis76

Проблема в том что за период 1 день план запроса плохой вот с таким мегапроцентами, а за 5 дней план запроса хороший.
Это случает на определенных датах. Т.е. меньшая выборка идет по кривому плану с мегапроцентами , мега проценты это уже кривой план MS SQL

можно форсировать нужный план - см QueryStore
25 ноя 21, 20:55    [22400940]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
selis76
Member

Откуда:
Сообщений: 407
Я могу конечно выложить полный кривой план, но что это даст? К сожалению запрос из 1С а там хинтами не поработаешь. Форсированием нового плана пока не заморачивался. Там ведь названия временных таблиц 1С не фиксированные, так как 1С по сути генератор запросов.
Видимо нужно в Microsoft написать в поддержку, мегапроценты вроде как ненормальная ситуация
25 ноя 21, 21:59    [22400950]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9157
selis76,

кликните правой кнопкой по плану и выберите "сохранить как...".
Если "ничего не даст", то какой смысл был вообще писать.
25 ноя 21, 22:10    [22400955]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
selis76
Member

Откуда:
Сообщений: 407
Владислав Колосов
selis76,

кликните правой кнопкой по плану и выберите "сохранить как...".
Если "ничего не даст", то какой смысл был вообще писать.


Я просто думал что возможно это ивестный баг и есть флаги какие нибудь на эту тему. Т2371 микрософт не просто так придумал, хотя при их идеологии статистики он должен быть в базе еще с 2008 SQL
25 ноя 21, 22:23    [22400961]     Ответить | Цитировать Сообщить модератору
 Re: Live plan в SQL 2019 и большие проценты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9157
selis76,

на баз не похоже, особенность запроса.
26 ноя 21, 10:57    [22401124]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить