Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
Коллеги, почему по вашему мнению происходит такая недооценка? Индексы перестроены, статистика хоть авто, хоть фуллскан - недооценка постоянная. индекс скан : таблица 709млн записей, колумнстор + обычные индексы индекс сик : таблица 1.4млрд записей, колумнстор + обычные индексы Microsoft SQL Azure (RTM) - 12.0.2000.8 May 2 2019 20:11:13 Copyright (C) 2019 Microsoft Corporation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 17:49 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
Там еще поди хитрый предикат при скане есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 17:51 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичТам еще поди хитрый предикат при скане есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 17:59 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komradГавриленко Сергей АлексеевичТам еще поди хитрый предикат при скане есть? Смотрите подробности в "property", там будут предикаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 18:23 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLexkomradпропущено... Смотрите подробности в "property", там будут предикаты. В property Columnstore index scan нет предикатов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 18:37 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komradmsLexпропущено... Смотрите подробности в "property", там будут предикаты. В property Columnstore index scan нет предикатов Есть подозрение, что в скане показывается эстимайт с учетом probe. Так же есть подозрение, что вам нужны все данные из CS и эвристическая оценка probe сильно занижена относительно реальных 100% записей, что проходят probe предикат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 18:49 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLexkomradпропущено... В property Columnstore index scan нет предикатов Есть подозрение, что в скане показывается эстимайт с учетом probe. Так же есть подозрение, что вам нужны все данные из CS и эвристическая оценка probe сильно занижена относительно реальных 100% записей, что проходят probe предикат. Про 100 % я ошибся, остальное в силе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2019, 18:54 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLexmsLexпропущено... Есть подозрение, что в скане показывается эстимайт с учетом probe. Так же есть подозрение, что вам нужны все данные из CS и эвристическая оценка probe сильно занижена относительно реальных 100% записей, что проходят probe предикат. Про 100 % я ошибся, остальное в силе. есть способы повлиять на эвристику или подсказать оптимайзеру правильный маршрут? Кстати, на тестовом сервере в QueryStore нашелся план при котором запрос отрабатывает за 10 минут, вместо "типичных" 25 и редких 50 минут на проде. Планы, естественно, разные. В быстром плане оценка кол-ва записей в таблице поближе к истине и, соответственно, меняется порядок джойна таблиц. Сам запрос - это селект из вью, которая использует 11 других вью, которые в свою очередь смотрят на 9 таблиц. Экспортировать в QueryStore пока не представляется возможным, использовать хинт option use plan можно только в академических целях. Такое решение как постоянное не годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 11:17 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komrad, предположу, что статистика распределения значительно неравномерна. Возможно, хинт for unknowh улучшит предположения оптимизатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 11:26 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовkomrad, предположу, что статистика распределения значительно неравномерна. Возможно, хинт for unknowh улучшит предположения оптимизатора. хинт попробую histogram steps у большого кол-ва столбцов действительно в максимуме (200). на картинке у некоторых 201 - это подвирает sys.dm_db_stats_properties ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 12:19 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
вторая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 12:22 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
Неверная оценка probe предикатом количества записей это ожидаемое поведение. Этот предикат работает только в параллельных планах. Добавьте option(maxdop 1) в запрос и он пропадет (правда вместе с параллелизмом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 12:43 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
В продолжение темы Насколько я понял, оценки probe предикат это просто доля от исходного объема данных в фильтруемой таблице (в общем случае резалтсете). У меня получилось, что оценки начинаются от 1/1000000 и дальше повышаются с шагом в x10 1/100000, 1/10000, 1/1000 и т.д. Оценка эта зависит от количества записей, на основе которых построен bitmap (первая таблица в hash-join, которой нет на скриншоте вашего плана). Соответственно, для увеличения эстимейт оценки probe, нужно повышать эстимейт оценки первой таблицы, участвующей в hash join . PS Кстати, насколько точна оценка записей в первой таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 14:07 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLexВ продолжение темы Насколько я понял, оценки probe предикат это просто доля от исходного объема данных в фильтруемой таблице (в общем случае резалтсете). У меня получилось, что оценки начинаются от 1/1000000 и дальше повышаются с шагом в x10 1/100000, 1/10000, 1/1000 и т.д. Оценка эта зависит от количества записей, на основе которых построен bitmap (первая таблица в hash-join, которой нет на скриншоте вашего плана). Соответственно, для увеличения эстимейт оценки probe, нужно повышать эстимейт оценки первой таблицы, участвующей в hash join . PS Кстати, насколько точна оценка записей в первой таблице? actual соответствует реальному кол-ву записей отношение estimated/actual в моем случае 1/10000 План, показанный на скриншоте, на самом деле самый медленный из полученных, и был использован для иллюстрации недооценки, которая и фигурует в двух других планах, которые используются в prod & test. Cамый быстрый план (10 минут) в тестовой среде, выгружен из QueryStore и получить/воспроизвести его на проде пока не получается. Самый быстрый план на проде работает 25 минут. Кол-во записей в самых больших таблицах (Treinactiviteit_MS_SPK, Treinactiviteit_L) на тесте на 10% больше, чем на проде. По уровню ресурсов оба "сервера" одинаковы. Написано в кавычках, поскольку по это Azure SQL DB и админского доступа к серверу нет. планы приложены в zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 15:52 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
размеры таблиц на проде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 15:53 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
размеры таблиц на тесте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 15:54 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komradactual соответствует реальному кол-ву записей естественно komradотношение estimated/actual в моем случае 1/10000 На самом деле это actual на выходе из скана это просто количество записей в таблице, а estimated на выходе из скана - это эстимейт после фильтра В аттаче предварительные планы, там нет actual значений. Увидеть ошибку в оценке невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 16:01 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLex, приложены актуальный план с прода с теста не сохранился и получить пока невозможно поэтому приложил актуальный план запроса с форсированным планом (option (use plan N'...')) от тестового сервера, если это сравнимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 16:44 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komradmsLex, приложены актуальный план с прода с теста не сохранился и получить пока невозможно поэтому приложил актуальный план запроса с форсированным планом (option (use plan N'...')) от тестового сервера, если это сравнимо https://www.sql.ru/forum/actualfile.aspx?id=21915690] Приложенный файл (2 actual plans.zip - 99Kb) Во-первых, у вас построение плана завершилось по timeout-у Во-вторых, эстиматор сильно промахнулся при оценке количества строк, причем в обоих планах Попробуйте разбить запрос на несколько, с промежуточной материализацией части данных во временных таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 17:10 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
[quot msLex]komradmsLex, приложены актуальный план с прода с теста не сохранился и получить пока невозможно поэтому приложил актуальный план запроса с форсированным планом (option (use plan N'...')) от тестового сервера, если это сравнимо https://www.sql.ru/forum/actualfile.aspx?id=21915690] Приложенный файл (2 actual plans.zip - 99Kb) msLexВо-первых, у вас построение плана завершилось по timeout-у это видел, но считал легитимным исходом msLexВо-вторых, эстиматор сильно промахнулся при оценке количества строк, причем в обоих планах. Да, но смотря на estimated plan на тесте эстиматор промахивается на порядок меньше, чем в проде (700к vs 60k записей), и оптимизатор смог построть 10-минутный план вместо 25-минутного. Или тут сыграла случайность и таймаут ? msLexПопробуйте разбить запрос на несколько, с промежуточной материализацией части данных во временных таблицах. есть такой шаг в списке задач разработчиков, но пока пытаюсь "оживить" то что есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 17:27 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
msLexВо-первых, у вас построение плана завершилось по timeout-у в этом ажуре руки просто связаны можно было бы попробовать дать больше времени оптимизатору на выбор плана (OPTION(QUERYTRACEON 8780)) но не разрешено :( Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 17:46 |
|
||
|
сильная недооценка кол-ва записей (underestimate)
|
|||
|---|---|---|---|
|
#18+
komradmsLexВо-первых, у вас построение плана завершилось по timeout-у это видел, но считал легитимным исходом Ну как легитимный, оптимизатор мог (или считал, что мог) сделать план запроса лучше, но у него не хватило "времени" komradmsLexВо-вторых, эстиматор сильно промахнулся при оценке количества строк, причем в обоих планах. Да, но смотря на estimated plan на тесте эстиматор промахивается на порядок меньше, чем в проде (700к vs 60k записей), и оптимизатор смог построть 10-минутный план вместо 25-минутного. Или тут сыграла случайность и таймаут ? Может таймаут, может разница в нагрузке на боевой/тестовый стенд. Как я уже сказал, повлиять на эстиматы probe можно только этимайетами внешней, первой таблицы, но у вас там, как я увидел, точные оценки (est = 1 / act = 1). Если б это были не view, можно было бы попробовать где-то захинтовать хеш джойны вместо nested loop. В рамках эксперемента, попробуйте выполнить этот запрос с option(hash join), может скан всех таблиц будет проще, чем миллионы index seek-ов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2019, 17:46 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1687628]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
135ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 451ms |

| 0 / 0 |
