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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.12.2007, 13:18   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Запрос:
X++:
while select inventTable where ...
{
}
Где "..." набор некоторых ограничений. В итоге цикл выполняется 66542 раза за 32 сек. Если в цикл добавить запрос на выборку запасов в наличии
X++:
select sum(AvailPhysical) from inventSum
join maxof(recid) from InventDim
where inventSum.InventDimId      == inventDim.inventDimId 
   && inventSum.ItemId           == inventTable.ItemId 
   && inventSum.Closed           == NoYes::No 
   && inventDim.InventLocationId == 'склад'
Запрос выполняется очень быстро. Разве что немного мешает maxof(recid), но без него на сервер уходит запрос всех полей из InventDim, что неверно.
а зачем использовать агрегатную функцию? просто join recId не дает нужного эффекта?
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Так вот - такой цикл выполняется очень долго. Честно ждал полчаса, но безрезультатно.
Что-то я не пойму: цикл while selet inventTable выполняется быстро, запрос по InventSum выполняется быстро, а все вместе медленно? Попробуйте поставить условия where по InventSum перед join InventDim - на форуме писали, что Ms SQL может не самым эффектиным образом обрабатывать запрос по нескольким таблицам, где все where свалены в конец запроса. Посмотрите на план запроса, на то, какие индексы там используются. Попробуйте поменять условия where для InventSum, чтобы они соответствовали порядку полей хоть в одном из индексов на InventSum, - на перестановку полей при подборе индекса у СУБД тоже может уходить дополнительное время. Если ничего не поможет, попробуйте использовать forceplaceholders в запросе - возможно, на 66542 итераций его парсинга СУБД тратит больше времени, чем на саму выборку данных.
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Вопрос что здесь не так, почему такое расхождение теории с практикой?
Трассировка SQL-запросов и профилировищик из СУБД гораздо точнее ответят вам на этот вопрос.
Теги
inventsum, inventtable, номенклатура, остатки, производительность, прайс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оценка производительности Axapta Object Server vesna dba DAX: Администрирование 15 29.06.2009 13:53
Проблемы быстродействия Axapta 3.0 Alexandr A. Osipkin DAX: Администрирование 37 16.02.2007 22:43
mazzy: Сравнительное тестирование производительности Microsoft Axapta v.3.0. CУБД Microsoft SQL Server 2005 и Microsoft SQL Server 2000 Blog bot DAX Blogs 0 28.10.2006 17:22
Счетчики производительности Axapta Business Connector rumpleteazer DAX: Администрирование 10 23.06.2005 14:16
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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