AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2010, 03:29   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
axperf: Important SQL Server Change! - Parameter Sniffing and Query Plan Caching
Источник: http://blogs.msdn.com/axperf/archive...n-caching.aspx
==============

Some of you that attended Convergence may have heard about a significant SQL Server change that can result in substantial performance improvements for Dynamics AX customers. You can find details on the change and how to acquire the associated SQL Server...(read more)

Источник: http://blogs.msdn.com/axperf/archive...n-caching.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 23.05.2010, 23:32   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Интересно, а кто-нить уже применил эту новую возможность Ms SQL Server? Или хотя бы начал ее тестирование?..
Старый 24.05.2010, 00:54   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
честно, что-то я не понял, что изменилось, и как получилось
Цитата:
customer testing have shown dramatic improvements
Старый 24.05.2010, 02:53   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Ох уж эти евангелисты.. Изобретена заветная опция /FAST, мы должны поведать об этом миру
Цитата:
Сообщение от Wamr Посмотреть сообщение
честно, что-то я не понял, что изменилось
При включенном trace flag оптимизатор при построении плана исполнения параметризованного запроса использует не переданные значения, а усредненную селективность + информацию о размере используемых таблиц + некоторые зашитые в оптимизатор значения селективности операторов сравнения (например мы считаем что условие WHERE MYFIELD = @SOMEVALUE возвращает 10% записей, WHERE MYFIELD > @SOME VALUE - 60% и т.д.)

Пример:
Мы в своей БД ведем учет в нескольких компаниях разного размера - большая 001, средняя 002 и совсем крохотная 003 (70%, 25% и 5% общего объема данных соответственно).
До появления заветной опции при использовании prepared execution попадающий в кэш план сильно зависит от того, с какими параметрами (для какой компании) он был построен. В нашем случае для компании 003 (5%) простой как дверь индекс по DATAAREAID будет иметь хорошую селективность, а в большой 001 для SELECT * FROM MYTABLE WHERE DATAAREAID = '001' будет дешевле использовать table scan.

"Волшебная" опция заставит оптимизатор брать усредненную селективность (в случае трех компаний 1 / 3 = 0.33). Что это дает и ответ на вопрос "как получилось 'customer testing have shown dramatic improvements'" - см. ниже

Пример из жизни (уже из прошлого, пускай и недалекого):
Мы ведем учет в 15 компаниях в AX 4.0, все начинают отсчет от 1 января прошлого года (после миграции и переноса остатков из старой БД), номенклатурные справочники совпадают процентов на 80 во всех компаниях. Единственное отличие - пара крупных компаний (стран) генерирует 5-10 миллионов складских транзакций в год, остальные не в пример меньше, скажем 25 тысяч для самых мелких, итого 20 миллионов складских транзакций по всем компаниям за год. В середине года внезапно (в этой компании все только так и происходит) во всех странах warehouse manager-ов одолевает желание посмотреть складские остатки на январь-февраль. Кто работал с inventory value отчетами, знает, что в них используется "откручивание" всех складских проводок от "сегодня" до отчетной даты. Так вот, если первым отчет запустил менеджер из "маленькой" компании, оптимизатор просканирует некластерный индекс по (DataAreaId, ItemId, FinancialDate), что в зависимости о отчетной даты вернет от 0.01 до 0.1 процентов от общего обхемы данных, после чего по указателям из индекса он метнется к страницам с данными (пример условный, зависит от модификаций и распределения данных). Оптимизатор молодец, отчет работает быстро, менеджер доволен. Следующим отчет запускает менеджер "большой" (нет, лучше так - БОЛЬШОЙ) компании, план уже закэширован, настроение у оптимизатора шапкозакидательское, вот только метаться за данными ему придется на пару порядков раз чаще, отчет работает во столько же раз медленнее, что несколько удручает менеджера БОЛЬШОЙ компании

Теперь о том, что изменилось. При включенном trace flag-е селективность DataAreaId как для маленькой, так и для большой компаний будет считаться как 1 / 15 = 0.06(6) (без него - 25000 / 20000000 = 0.00125 и 10000000 / 20000000 = 0.5 соответственно), что дает чуть более пессимистичный подход при построении плана исполнения в маленькой компании. Стало лучше? Может быть. НО. Если посмотреть на полученную селективность ( 1 / 15 = 0.06(6)), она и рядом не стояла с реальной в случае БОЛЬШОЙ компании ( 0.5 )

Что же касается dramatic improvements, есть некоторые основания полагать, что это не совсем improvements, а скорее переход от состояния "полная Ж" в случаях, подобных рассмотренному, к состоянию "вполне приемлемо".
Так что пробовать, тестировать - да пожалуйста, главное - правильно сформировать ожидания
Как по мне, так просто еще одна полезная опция, как обычно - со своей спецификой, областью применения и ограничениями. Из плюсов - еще одна возможность управлять поведением оптимизатора в случае невозможности управлять поведением приложения, что как бы не совсем наш случай (AX). Из минусов - опять же глобальность (trace flag работает на уровне сервера) и неаккуратность в некоторых случаях.

Я в описанном случае конечно "пощупал" бы этот trace flag, но за неимением такового расставленные в нужных местах forceliterals и принудительный регулярный сброс закэшированных планов (DBCC FREEPROCCACHE) нормально "рассосали" ситуацию

P.S. Финальный штрих - Overcoming parameter sniffing issue in Microsoft Dynamics AX 2012-R2 – CU6
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: mazzy (5), Wamr (7), Maximin (2), sukhanchik (5), Poleax (1).
Теги
sql 2005, sql 2008, sql server, полезное, производительность

 


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:37.