21.03.2017, 11:04 | #1 |
Участник
|
Прослушивание параметров SQL Dax
Коллеги, добрый день!
Вопрос весьма общий, но все же попрошу по возможности ответить опытных. Часта ли проблема прослушивания параметров в связке SQL Server 2008 R2 и Dax 2009? Периодически, довольно часто на серваке бывают зависоны при том, что в работе в этот момент стандартные вещи. ПРоблема уходит (предположительно) после обновления статистик одной или нескольких ключевых таблиц - inventdim, inventtrans и тд. Поэтому, я предположил, что имеет место прослушивание параметров. Прошу дать свои методы устранения подобных ситуаций или опровергнуть мои предположения. |
|
21.03.2017, 12:38 | #2 |
Участник
|
А вы вот это применяли ?
emeadaxsupport: How to proactively avoid parameter sniffing step-by-step говорят помогает. |
|
22.03.2017, 02:40 | #3 |
Участник
|
Цитата:
вообще это очень хорошо описано в статье https://www.brentozar.com/archive/20...in-sql-server/ возможные решения https://www.brentozar.com/blitzcache...eter-sniffing/ |
|
|
За это сообщение автора поблагодарили: dn (1), Logger (1), alex55 (1), Vadik (1). |
22.03.2017, 10:28 | #4 |
Участник
|
Цитата:
Цитата:
Цитата:
Сообщение от gkochkin
Периодически, довольно часто на серваке бывают зависоны при том, что в работе в этот момент стандартные вещи. ПРоблема уходит (предположительно) после обновления статистик одной или нескольких ключевых таблиц - inventdim, inventtrans и тд. Поэтому, я предположил, что имеет место прослушивание параметров.
|
|
|
За это сообщение автора поблагодарили: Logger (1). |
22.03.2017, 10:49 | #5 |
Участник
|
Цитата:
Если речь не о внедрении с несколькими компаниями, то, мне кажется, частота возникновения такой проблемы обратно пропорциональна частоте обновления статистики.
То есть для внедрений с одной компанией решение, описанное @Logger не подойдет? Мы часто обновляем статистику для некоторых таблиц,да. Это ведь как раз говорит, что проблема прослушивания параметров вероятна!? |
|
22.03.2017, 11:23 | #6 |
Участник
|
Предложенное выше решение относится к DataAreaId и в меньшей степени к Partition (которого нет в AX 2009), так что для внедрений с одной компанией в базе AX оно не подойдет.
Виной ли именно прослушивание параметров в ваших проблемах, я судить не берусь, причин тормозов может быть очень много. Может, у вас выгрузка данных в кубы стартует невовремя, или autoshrink базы включен, или кто-то заходит на СУБД и сбрасывает кэш планов исполнения запросов, мало ли. Сначала надо локализовать проблему, а потом уже думать, как ее лечить. |
|
22.03.2017, 11:24 | #7 |
Модератор
|
Да как сказать - бывает что у складов \ товаров по частоте и характеру использования случается большой разброс. Иногда приходится forceliterals в коде навязывать. Не очень красиво (overlayering так его ), но изменения минимальные и работают
__________________
-ТСЯ или -ТЬСЯ ? |
|
22.03.2017, 11:31 | #8 |
Модератор
|
То что Вы статистику пересчитываете само по себе не говорит ни о чем, ее надо пересчитывать. Если Вы пересчет статистики или перестройку индексов регулярно используете как средство борьбы с тормозами, и это помогает - то инструмент решения проблем выбран неверно. Об этом, если мне память не изменяет, пост на который trud дал ссылку, почитайте его вдумчиво
__________________
-ТСЯ или -ТЬСЯ ? |
|
22.03.2017, 15:16 | #9 |
Участник
|
Спасибо!
Я читал статьи Brent Ozar, в том числе и рекомендованную. Буду знакомиться с ней ближе. |
|
22.03.2017, 17:46 | #10 |
Участник
|
К слову о фиксе в аксапте по проблеме Parameters sniffing.
Почему они (MS) применили такой подход с включением литералов только для DataareaId и PartitionID? Ведь в базе есть еще куча полей с неравномерно распределенными значениями. Например, любое поле с енумом, обозначающим какой-то статус - уже кандидат на эту проблему. Или еще любят в коде накладную от платежа отличать по заполненности поля CustTrans.Invoice и.т.п. Почему бы не дать возможность для директивы forceLiterals действовать только на определенный список полей или зашить его в настроечной табличке типа SqlStorage ? Или в свойстве табличного поля в AOT такое свойство сделать. Получился бы гибкий, универсальный инструмент. |
|
22.03.2017, 17:57 | #11 |
Модератор
|
Цитата:
Нунафиг, лучше уж на уровне приложения и запроса. Placeholders с одним планом на компанию (продуктивов с несколькими partition не видел пока) в большинстве случаев работают приемлемо (не зря же за SQL Server с его оптимизатором денег просят), и пилюли в виде forceliterals можно только в самых запущенных случаях прописывать
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 22.03.2017 в 18:11. |
|
22.03.2017, 21:52 | #12 |
Участник
|
Цитата:
Сейчас ведь тоже можно настраивать хранение табличек и индексов по тейблспейсам в SqlStorage. Никому это не мешает - наоборот очень удобно и гибко. Кому надо - настроили. кому не надо - он про это и не помнит. Кстати, в свете предстоящих запретов оверлеить приложение - это тоже было бы удобной настройкой. Зачем править исходный код, искать кучу мест где табличка может возникнуть в запросе (пойди их еще найди - не всегда это просто), затем мучайся и пиши extensions, когда можно в одном месте подправить настроечную табличку - и как по волшебству во всех запросах фильтру по указанному полю пойдут с литералами - красота ! По-моему, это было бы очень удобно и эффективно. |
|
23.03.2017, 07:00 | #13 |
Участник
|
|
|
23.03.2017, 08:11 | #14 |
Участник
|
Не надо ничего создавать, все уже давно создано
16 голосов ждут с 19/06/2015 https://connect.microsoft.com/dynami...etails/1449788 |
|
|
За это сообщение автора поблагодарили: Logger (3). |
23.03.2017, 09:16 | #15 |
Участник
|
|
|
23.03.2017, 09:25 | #16 |
Участник
|
Цитата:
Сообщение от trud
Не надо ничего создавать, все уже давно создано
16 голосов ждут с 19/06/2015 https://connect.microsoft.com/dynami...etails/1449788 Проголосовал. |
|
23.03.2017, 11:36 | #17 |
Участник
|
Цитата:
Я думаю имеет смысл что-то для них менять только если явно есть подозрение на проблемы. Например: InventTrans.statusIssue InventTrans.statusReceipt CustTrans.invoice VendTrans.invoice Как правило еще InventDim.InventLocationId 90 % значений ходит по 1-2 складам. |
|
23.03.2017, 11:40 | #18 |
Участник
|
Цитата:
Сообщение от trud
Не надо ничего создавать, все уже давно создано
16 голосов ждут с 19/06/2015 https://connect.microsoft.com/dynami...etails/1449788 Цитата:
Posted by trud on 12.01.2017 at 1:47
I also suggest adding ability to specify OPTIMIZE FOR UNKNOWN hint per query basis. in some cases when we have not equal data distribution it also can solve a lot of issues regarding query sniffing parameters |
|
23.03.2017, 11:46 | #19 |
Модератор
|
А чем OPTIMIZE FOR UNKNOWN лучше DATAAREALITERAL и отдельного плана исполнения на компанию?
__________________
-ТСЯ или -ТЬСЯ ? |
|
23.03.2017, 11:51 | #20 |
Участник
|
Цитата:
Просто пока старое ядро стоит, для которого невозможно включить DATAAREALITERAL - применяется такой способ. Ну и плюс я подумал, что если есть другие проблемные поля, для которых проблема актуальна, то можно попробовать этот финт для них. За неимением ничего лучшего. |
|
Теги |
dax, parameter sniffing, sql 2008, troubleshooting, tuning |
|
|