|
![]() |
#1 |
Участник
|
О, это презентация от людей которые рекомендовали везде update_recordset писать(https://denistrunin.com/understanding-sql-blocking/)
И они же рекомендуют запускать переиндексацию для борьбы с неправильными планами, это я как-то пропустил ![]() У Брента есть отличное видео по этому поводу https://www.youtube.com/watch?v=iEa6_QnCFMU Цитата:
Вообще их презентация показывает что они сами это никогда не делали, к примеру, вам звонит клиент, вы подключаетесь и видите проблемы, разберем советы которые они дают As a first step... try to tune expensive code / queries Add/change indexes - т.е. у клиента все тормозит, и мы прямо на рабочей будем добавлять индексы? Хотя как разбор итогов, это правильный совет •Increase selectivity - этот совет я не понял. "Надо писать правильный код, а неправильный писать не надо". Сложно спорить Add hints - в АХ2012 к примеру index_hints не работает. К тому же куда их добавлять то Rebuild indexes - так делать точно не надо Update statistics - и так тоже Apply other code changes (e.g. change pattern) - опять непонятный совет. пишите производительный код, ну ок Т.е. более правильный порядок разрешения Цитата:
Run a top SQL query and copy results to Excel(you can copy all columns except the last one - "query_plan")
Click on the last column - "query_plan" for the first 3-5 rows Save them to separate files with .sqlplan extension Try to clear the SQL cache with DBCC FREEPROCCACHE command Последний раз редактировалось trud; 08.05.2020 в 06:04. |
|
|
За это сообщение автора поблагодарили: Logger (5). |
![]() |
#2 |
Модератор
|
Цитата:
Сообщение от trud
![]() О, это презентация от людей которые рекомендовали везде update_recordset писать(https://denistrunin.com/understanding-sql-blocking/)
Цитата:
И они же рекомендуют запускать переиндексацию для борьбы с неправильными планами, это я как-то пропустил
Цитата:
В АХ никакие планы не должны меняться от времени
![]() Цитата:
Вообще их презентация показывает что они сами это никогда не делали
![]()
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#3 |
Moderator
|
Цитата:
Сообщение от Vadik
![]() "Переиндексацию для борьбы с неправильными планами" я видимо тоже пропустил - можете дать ссылку на первоисточник? А если не зацикливаться на планах исполнения, то из некоторых сценариев (например, массовые forwarded records) - выходов кроме регулярной перестройки индексов (ну или изменения схемы) в общем-то и нет
То есть - таки да, если кто-то предлагает лечить проблему медленного исполнения запроса перестроением индекса (без предложения проанализировать план запроса, почистить кэш планов хотя бы, обновить статистику и тд и тп), то это для меня - признак сомнительной квалификации автора. Мне, правда, применение plan guide тоже кажется механизмом последнего шанса, когда систему постоянно глючит на одном и том же запросе и регулярное обновление статистики не помогает, но мои сомнения по поводу рекомендации перестраивать индексы на любой чих это не отменяет. |
|
![]() |
#4 |
Модератор
|
Цитата:
Сообщение от fed
![]() По моим наблюдениям, если перестроение индексов по таблице помогло с кривым планом исполнения, то в 98% случаев это случилось только потому что при перестроении был сброшен план исполнения, а следующий план исполнения был более удачным (то есть - имеем ситуацию неудачного parameters sniffing и plan guide может помочь). И только примерно в 2% случаев, перестроение индексов помогает действительно потому что индекс был фрагментирован или в нем было много ghost records после массового удаления и тп.
Цитата:
Мне, правда, применение plan guide тоже кажется механизмом последнего шанса, когда систему постоянно глючит на одном и том же запросе и регулярное обновление статистики не помогает, но мои сомнения по поводу рекомендации перестраивать индексы на любой чих это не отменяет
As a first step… try to tune expensive code / queries • Add/change indexes • Increase selectivity • Add hints • Rebuild indexes • Update statistics • Apply other code changes (e.g. change pattern) Т.е. мы приписываем автору что-то, чего он не заявлял, и на этом основании строим свои дальнейшие умозаключения. Удобно
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#5 |
Участник
|
Так а как по вашему надо решать сниффинг параметров?
Один из комментов, это собственно все, гугл ничего не ищет по этому поводу Цитата:
I had a discussion about APRC feature with MS and they confirmed the feature is activated in production environments since October 2019 and some plans are automatically forced based on certain conditions. To reset forced planned, I was advised to update statistics or make schema modification (new index, field, index rebuild, and so on).
|
|
![]() |
#6 |
Модератор
|
"Прямо сейчас" - обновление статистики (сбросив закешированный план), сохранить план и в фоне разбираться с тем, что протухло. Чинить - в AOT (индекс который должен подбираться даже при тестировании с "плохим" значением параметра, либо код). Если будут рецидивы в процессе починки, можно создать plan guide (после починки - снести). По крайней мере, так не будет пасхалок в виде "в UAT работает не так как в продуктиве", "работает в пяти компаниях из десяти" и т.п.
Я возможно повторюсь сейчас. Я не против plan guides как таковых и пользуюсь ими периодически. Но так как они блокируют оптимизатор, отношусь к ним как ко временным надстройкам (костылям). Поставить клиента со сломанной ногой на костыли можно быстро и с ними ему даже будет какое-то время удобнее (чем без них). Заставлять с ними жить вечно и добавлять новые (с этими - на дачу, с этими - в магазин) - на мой взгляд, уже неправильно Цитата:
Сообщение от fed
![]() Понимаешь, на самом деле надо не пробовать, а для начала посмотреть кэш планов запросов и для самых тяжелых запросов посмотреть на сами планы запросов и попытаться понять что там не так. После этого уже можно принимать осмысленные решения - сам запрос менять, дополнительные индексы строить, попробовать статистику обновлять или еще чего-то делать.
![]() Цитата:
Сам по себе подход "можно попробовать", наводит на мысль что этот документ родился из алгоритма так называемого "checklist tuner". Это такой персонаж, туповатый, но самоуверенный, и как правильно титульной (для микрософта) национальности, который "разбирается" с твоими проблемами производительности, заставляя тебя выполнять все шаги из его чеклиста. И попытки ему как-то объяснить что в случае проблем со сводным планированием чистить таблицы SalesParm*/PurchParm* несколько странно, к особым результатам не приводят. (Кстати -даже странно что рекомендация чистить таблицы параметров пропущена из этого замечательного документа). Соответственно - отношение ко всем этим чеклистам у меня исключительно скептическое (даже если отдельные пункты чеклиста сами по себе разумны и для каких-то случаев применимы)
![]()
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 12.05.2020 в 19:24. |
|
![]() |
#7 |
Участник
|
Цитата:
![]() Но join с InventDim как правило невозможно починить индексами или кодом без глобальных переделок, тут сама архитектура такая. Возьмите пример из поста - что тут можно проиндексировать? по всем полям в WHERE уже есть индексы, InventDim большая таблица X++: SELECT A.* FROM INVENTITEMPRICE A WHERE ((A.DATAAREAID=@P1) AND (((A.ITEMID=@P2) AND (A.PRICETYPE=@P3)) AND (A.ACTIVATIONDATE>@P4))) AND EXISTS (SELECT ''x'' FROM INVENTDIM B WHERE ((B.DATAAREAID=@P5) AND ((B.INVENTDIMID=A.INVENTDIMID) AND (B.INVENTSITEID=@P6)))) ORDER BY A.DATAAREAID,A.ACTIVATIONDATE,A.CREATEDDATETIME DESC |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#8 |
Moderator
|
Цитата:
Сообщение от Vadik
![]() Ну так где рекомендация-то? Я вижу список вещей которые можно попробовать, но никак не пошаговый план действий
As a first step… try to tune expensive code / queries • Add/change indexes • Increase selectivity • Add hints • Rebuild indexes • Update statistics • Apply other code changes (e.g. change pattern) Т.е. мы приписываем автору что-то, чего он не заявлял, и на этом основании строим свои дальнейшие умозаключения. Удобно Сам по себе подход "можно попробовать", наводит на мысль что этот документ родился из алгоритма так называемого "checklist tuner". Это такой персонаж, туповатый, но самоуверенный, и как правильно титульной (для микрософта) национальности, который "разбирается" с твоими проблемами производительности, заставляя тебя выполнять все шаги из его чеклиста. И попытки ему как-то объяснить что в случае проблем со сводным планированием чистить таблицы SalesParm*/PurchParm* несколько странно, к особым результатам не приводят. (Кстати -даже странно что рекомендация чистить таблицы параметров пропущена из этого замечательного документа). Соответственно - отношение ко всем этим чеклистам у меня исключительно скептическое (даже если отдельные пункты чеклиста сами по себе разумны и для каких-то случаев применимы). |
|
![]() |
#9 |
Участник
|
Цитата:
Сообщение от Vadik
![]() Помню, разбирали.
"Переиндексацию для борьбы с неправильными планами" я видимо тоже пропустил - можете дать ссылку на первоисточник? Цитата:
На самом деле в линкед ин откомментили что для всех продакшн баз включена автокоррекция планов(SQL Automatic plan correction), т.е. теперь эту работу будет делать электронный алгоритм Я с этим еще правда не встречался, интерестно проверить как это будет работать на практике. Последний раз редактировалось trud; 12.05.2020 в 10:10. |
|
|
За это сообщение автора поблагодарили: Vadik (1). |
![]() |
#10 |
Модератор
|
Она не "моя", я просто разместил объяву
![]() Цитата:
На самом деле в линкед ин откомментили что для всех продакшн баз включена автокоррекция планов(SQL Automatic plan correction), т.е. теперь эту работу будет делать электронный алгоритм
Я с этим еще правда не встречался, интерестно проверить как это будет работать на практике
__________________
-ТСЯ или -ТЬСЯ ? |
|
Теги |
ax2009, parameter sniffing, sql server |
|
|