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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2008, 07:40   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
использование forcepalceholders
Привет всем. Верно ли, что, если в цикле идет сравнение двух полей (Table1.Fiedl1 != Table1.Fiedl2), то использование forcepalceholders в запросе снизит производительность? Это для Ax 3.0 на Oracle.

Последний раз редактировалось Eldar9x; 23.10.2008 в 07:42.
Старый 23.10.2008, 08:03   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Спасибо, конечно, но на вопрос это не отвечает. Мне известно, что placeholders рекомендуется использовать для частых запросов. У меня как раз такой случай, но есть подозрение, что план исполнения будет строиться заново, как раз из-за этого условия Table1.Fiedl1 != Table1.Fiedl2. Отсюда и вопрос...

Последний раз редактировалось Eldar9x; 23.10.2008 в 08:39.
Старый 23.10.2008, 08:07   #4  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Я в Оракле не силен, но даже в этом случае очевидно, что благодаря настолько обощенной формулировке утверждение обречено быть неверным.
__________________
С уважением,
glibs®
Старый 23.10.2008, 08:26   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Eldar9x
...
placeholders рекомендуется использовать для частых вопросов.
...
Я бы сказал, если ожидается, что с небольшой периодичностью проследует несколько одинаковых по структуре запросов, но с разными (или даже одинаковыми) условиями фильтрации.
Цитата:
Сообщение от Eldar9x
...
план исполнения будет строиться заново, как раз из-за этого условия Table1.Fiedl1 != Table1.Fiedl2.
...
Насколько я понимаю, план заново строиться не будет.

Недостаток placeholders заключается в том, что построенный в первый раз при определенных критериях фильтрации план запроса может оказаться (а может и не оказаться) неоптимальным для этого же запроса, но с другими критериями. И placeholders не дадут СУБД перестроить план запроса. Тут универсального лекарства нет. Хинты должны ставиться разработчиком сознательно. Впрочем, многие другие вещи им тоже должны делаться сознательно.
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 23.10.2008, 08:34   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Недостаток placeholders заключается в том, что построенный в первый раз при определенных критериях фильтрации план запроса может оказаться (а может и не оказаться) неоптимальным для этого же запроса, но с другими критериями. И placeholders не дадут СУБД перестроить план запроса.
...похоже на то, потому что добавление placeholders вообще убило производительность, которой у queryRun и так не хватало.
Старый 23.10.2008, 08:57   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А запрос по Table1 идет? И что имеется в виду под циклом?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.10.2008, 09:07   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
А запрос по Table1 идет? И что имеется в виду под циклом?
Под циклом я имел ввиду пробег в queryRun.
То есть такая структура формируется c помощью Query:
while select custTable
join custTrans
// тут добавил пару индексов custTrans - пр-ть увеличилась в два раза
where custTrans.AccountNum == custTable.AccountNum
&& custTrans.AmountMST != CustTrans.SettleAmountMST
Join LedgerJournalTrans
where LedgerJournalTrans.Voucher == custTrans.Voucher
{
...
}
Пишу по памяти, поэтому извиняйте, если что.
Так эта пробежка по queryRun жутко тормозит. Записей 500 еще обрабатываются секунд за 2, но чем больше тем хуже. C добавлением placeholders и это перестало работать. Нашел вот это Table Scan через QueryRun , почти такая же ситуация

Последний раз редактировалось Eldar9x; 23.10.2008 в 09:12.
Старый 23.10.2008, 09:33   #9  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Forceplaceholders потенциально мог бы быть полезным, если бы внутри вашего queryRun был бы организован цикл while select someTable. А так запрос выполняется один раз. Пробег курсором по запросу — это не несколько одинаковых запросов подряд. Это один запрос и пробежка по нему курсором. Соответственно и оптимизировать такой запрос нужно с другой стороны.
__________________
С уважением,
glibs®
Старый 23.10.2008, 09:33   #10  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Под циклом я имел ввиду пробег в queryRun.
То есть такая структура формируется c помощью Query:
while select custTable
join custTrans
// тут добавил пару индексов custTrans - пр-ть увеличилась в два раза
where custTrans.AccountNum == custTable.AccountNum
&& custTrans.AmountMST != CustTrans.SettleAmountMST
Join LedgerJournalTrans
where LedgerJournalTrans.Voucher == custTrans.Voucher
{
...
}
Пишу по памяти, поэтому извиняйте, если что.
Простите, можно поинтересоваться, что Вы таким запросом собираете?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.10.2008, 09:42   #11  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Forceplaceholders потенциально мог бы быть полезным, если бы внутри вашего queryRun был бы организован цикл while select someTable. А так запрос выполняется один раз.
В смысле,
X++:
while (queryrun.next())
{
  table1 = queryRun.get(...);
}
по сути не одно и тоже с
X++:
while select Table1
{
}
и различие в том, что первый код даст только один запрос?

Цитата:
Простите, можно поинтересоваться, что Вы таким запросом собираете?
собирается отчет по выплатам клиентов
Старый 23.10.2008, 09:54   #12  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Eldar9x
...
В смысле
...
В смысле, forceplaceholders обычно бывает эффективен вот в такой ситуации:

while select custTable
where custTable.custGroup == someVariable
{
while select FORCEPLACEHOLDERS custTrans
where custTrans.AccountNum == custTable.AccountNum &&
custTrans.SettledAmountMst >= 10
{
}
}

Пример, скорее всего, практически бесполезный, в компиляторе не проверялся, и названия некоторых полей я мог перепутать или придумать. И то, что такое можно выполнить одним запросом с джоином, я тоже знаю. Но на его основании суть должна быть понятна. Если выборка по CustTable даст несколько сот строк, то использование forceplaceholders в запросе по CustTrans даст визуально ощутимый эффект. Если выборки таким образом организовывать через Query, то суть будет такая же.
__________________
С уважением,
glibs®
Старый 23.10.2008, 10:07   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А вам все поля во всех таблицах нужны в выборке?
Из-за слишком большого размера данных в курсоре, возможно, у вас фетчится по 1-2 записи.
Попробуйте в выборке указать только нужные вам
__________________
Axapta v.3.0 sp5 kr2
Старый 23.10.2008, 10:11   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Если выборка по CustTable даст несколько сот строк
да, только вот неизвестно, сколько и какие наложить фильтры взбредет в голову пользователю при формировании запроса. Поэтому и пытаюсь прикинуть, что еще можно подсунуть в запрос, чтобы еще хоть немного увеличить производительность
Старый 23.10.2008, 10:20   #15  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Вам посмотреть внимательно на план запроса стоило бы в данной ситуации. Поэкспериментировать с запросом (средствами СУБД для начала). Посмотреть за счет чего он он долго считается. За счет чего он может начать считаться быстрее (тот же вариант с ограниченным набором полей проверить, например, на индексы посмотреть). Поэкспериментировать, как на план запроса повлияют те или иные сложные фильтры пользователей. А потом уже в Аксапту перебираться.
__________________
С уважением,
glibs®
Теги
документация, производительность, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование контейнеров и полей с неограниченными строками (текстом) в выражении WHERE не допускается. cutter DAX: Программирование 4 07.12.2007 11:16
Использование памяти клиентского ПК falcon65 DAX: Администрирование 0 07.11.2007 11:49
Использование основных средств в модуле Проект (4.0) Spider DAX: Функционал 8 29.08.2007 11:17
Использование OLAP-кубов MS AS. Help ! se2003 DAX: Функционал 7 19.07.2005 07:05
Использование аналитики vs. возможные проблемы Boris DAX: Функционал 23 02.12.2002 12:07

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

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

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