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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.05.2011, 09:57   #1  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Когда строиться план запроса в query или в queryRun
В какой момент строиться план запроса, т.е. имеет ли какой либо смысл скажем для оптимизации хранить query а затем по нему просто вызывать конструктор queryRun при условии что ограничение на другие поля у меня не устанавливается, меняются только значения ограничений.
Насколько я помню query и queryRun это динамические запросы а план по ним не кэшируется? Я прав или нет?
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 06.05.2011 в 10:02.
Старый 06.05.2011, 10:08   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Murlin Посмотреть сообщение
В какой момент строиться план запроса
По логике, должен строится непосредственно перед исполнением запроса., т.е. в момент первого queryRun.Next().
Старый 06.05.2011, 10:09   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Murlin Посмотреть сообщение
В какой момент строиться план запроса
строка sql-запроса отсылается на сервер в момент первого queryRun.next()

по идее в этот же момент должен строится план запроса.
но нужно учитывать эффекты кэширования планов запроса (кэширование делает SQL)
аксапта по-умолчанию посылает запросы с плейсхолдерами"sql myfield from mytable where mytable.myfield = '%1'". если sql видит, что такой запрос уже выполнялся, то может использовать уже скомпилированный ранее план запроса.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 06.05.2011 в 10:46. Причина: тьфу, плейсхолдерами, конечно.
Старый 06.05.2011, 10:42   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Аксапта и сама может компилировать запросы (насчет Oracle не знаю, но в MS SQL точно - с использвоанием sp_cursorprepexec), а потом использовать их повторно (sp_cursorexecute).
Вот только напрямую этим нельзя управлять. Ядро сам решает, когда это делать. Единственно, что можно - это обязательно использовать плейсхолдеры для циклических запросов
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (2).
Старый 06.05.2011, 10:51   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
аксапта по-умолчанию посылает запросы с литералами "sql myfield from mytable where mytable.myfield = '%1'". если sql видит, что такой запрос уже выполнялся, то может использовать уже скомпилированный ранее план запроса.
Сергей, это placeholder.
Да и поведение по умолчанию может зависить от настроек

PS Упс, уже исправил
__________________
Axapta v.3.0 sp5 kr2
Старый 06.05.2011, 11:04   #6  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от AndyD Посмотреть сообщение
Аксапта и сама может компилировать запросы (насчет Oracle не знаю, но в MS SQL точно - с использвоанием sp_cursorprepexec), а потом использовать их повторно (sp_cursorexecute).
Вот только напрямую этим нельзя управлять. Ядро сам решает, когда это делать. Единственно, что можно - это обязательно использовать плейсхолдеры для циклических запросов
Справедливости ради, надо заметить, что этим можно немножко управлять, меняя максимальное число открытых курсоров в конфигурации сервера. Фактически, эта цифра управляет числом скэшированных AOSом скомпилированных запросов. Правда я не уверен что AOS позволяет уменьшить это число ниже кого порога... Я не уверен что туда можно поставить,например, число в 5 курсоров...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
jinx: Zugriff auf die Query, QueryRun und DataSource in einer Form Blog bot DAX auf Deutsch 0 14.04.2008 18:05
Как же все-таки организованиы Query и QueryRun? VIS DAX: Программирование 4 03.07.2003 15:22
Query и QueryRun Maxim Gorbunov DAX: Программирование 3 18.05.2002 09:13

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

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

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