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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.12.2020, 11:58   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Дополню, что если запрос выполнить на SQL. Без участия аксапты, то выдает все данные быстро.
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 24.12.2020, 12:04   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от demianimp Посмотреть сообщение
Дополню, что если запрос выполнить на SQL. Без участия аксапты, то выдает все данные быстро.
Какая нехорошая девочка! Не получит подарки на новый год. И корпоратив проводите "Без участия аксапты"

стопудов в Аксапте вы выполняете процесс который в одной сессии пытается и записать в LedgerTrans и прочитать из этой же таблицы

типа в одном цикле пытается "получить сальдо" по счету на дату и разнести какую-нибудь коррекцию на этот же счет.
точно никто не вызывал метод selectForUpdate(true) на таблице, которая участвует в читающем запросе, который вы привели в первом посте?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 24.12.2020 в 12:07.
Старый 24.12.2020, 12:05   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1635 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от demianimp Посмотреть сообщение
Дополню, что если запрос выполнить на SQL. Без участия аксапты, то выдает все данные быстро.
О.. тогда у вас скорее всего проблема parameters sniffing. Поставьте хинт forceliterals в запрос, тогда должно быть одинаково. Ну или индекс
Старый 24.12.2020, 13:11   #4  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
Какая нехорошая девочка! Не получит подарки на новый год. И корпоратив проводите "Без участия аксапты"

стопудов в Аксапте вы выполняете процесс который в одной сессии пытается и записать в LedgerTrans и прочитать из этой же таблицы

типа в одном цикле пытается "получить сальдо" по счету на дату и разнести какую-нибудь коррекцию на этот же счет.
точно никто не вызывал метод selectForUpdate(true) на таблице, которая участвует в читающем запросе, который вы привели в первом посте?
Нет, в джобе только select (вывод данных в файл для анализа)

Цитата:
Сообщение от trud Посмотреть сообщение
О.. тогда у вас скорее всего проблема parameters sniffing. Поставьте хинт forceliterals в запрос, тогда должно быть одинаково. Ну или индекс
Не помог forceliterals.
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 24.12.2020, 18:13   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,721 / 1208 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от demianimp Посмотреть сообщение
Дополню, что если запрос выполнить на SQL. Без участия аксапты, то выдает все данные быстро.
Вы неправильно их готовите

Физически, Aхapta всегда оборачивает запрос в курсор-SQL, а план выполнения для курсора может принципиально отличаться от плана выполнения для запроса

Т.е. для целей тестирования именно производительности запроса в SQL надо делать так

X++:
DECLARE test CURSOR FOR 
select *
from ledgerTrans with (index (ACDate))     //Имя индекса будет другое
where ledgerTrans.dataAreaId = 'dat'         // Если есть dataAreaId
	and ledgerTrans.AccountNum = "AccountNum"
    and ledgerTrans.TransDate  <= '20200229'
    and ledgerTrans.Posting    = 14		--LedgerPostingType::LedgerJournal


open test
// Тормоза ожидаются вот здесь
FETCH NEXT FROM test

//Перебор записей
WHILE @@FETCH_STATUS = 0
begin

	FETCH NEXT FROM test
end

CLOSE test
DEALLOCATE test
И вот это уже у этого надо смотреть план выполнения запроса и замерять время выполнения.

Правда обычно тормоза бывают на самом первом шаге. На самом первом FETCH. Дальше обычно все быстро идет. Если же тормоза наблюдаются в процессе перебора записей, то попробуйте для начала перестроить индексы...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: trud (2).
Теги
ax2009, fetch api_cursor, sql server

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sertandev: Empowering D365 FO service endpoints with Azure API Management service Blog bot DAX Blogs 0 15.05.2019 22:11
dynamicsnavax: Hybrid connection - Web Api App for AX 2012 to Azure-part 4 Blog bot DAX Blogs 0 14.09.2017 13:11
gideonvos: API to CDM using Flow in a PowerApp Blog bot DAX Blogs 0 08.09.2017 11:11
goshoom: Open API for JSON-based custom services in AX 7 Blog bot DAX Blogs 0 22.07.2017 14:17
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25

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

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

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