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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2011, 11:42   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Insert_recordset и временные таблицы в БД
Привет всем.

Недавно обнаружил любопытную вещь.
Запросы вида insert_recordset ... select from в X++
При работы с БД зачем то используются временную табличку.
Т.е. вместо того чтобы выполнить аналогичный запрос к БД, вначале создается временная табличка, затем в неё заливаются подобным запросом данные, а затем уже из времянки они переливаются в табличку получатель. (пример - тут
\Data Dictionary\Tables\LedgerBalancesTransDelta\Methods\transferTempDeltaRecsToLedgerBalTrans )

Интересно, зачем так сделано ?
К чему эти дополнительные костыли (ведь это только замедляет выполнение запроса) и возможно ли как-то отключить их использование? (Может быть есть какой нить хинт или настройка в реестре)

У нас используется оракл и эти времянки после выполнения запроса не удаляются - приходится их периодически убивать вручную

P.S.
Речь идет об Ax2009
За это сообщение автора поблагодарили: S.Kuskov (3).
Старый 25.08.2011, 12:25   #2  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Logger Посмотреть сообщение
К чему эти дополнительные костыли (ведь это только замедляет выполнение запроса)
Скорее всего это сделано для уменьшения времени блокировки таблицы приемника при вставке большого числа записей, т.к. формирование нужного набора на основании выборки может происходить достаточно долго. Плюс расчет RecId.
Цитата:
Сообщение от Logger Посмотреть сообщение
и возможно ли как-то отключить их использование?
Боюсь нет.
За это сообщение автора поблагодарили: Logger (3).
Старый 25.08.2011, 12:30   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Насколько я понимаю, связано это с генерацией и вставкой значения RecId.

Т.е. сначала сохраняются записи во временную таблицу - получается кол-во записей для вставки (при этом, recId присваивается увеличивающее значение, начиная с единицы).
Затем, выделяется нужный диапазон в systemSequences
Далее, происходит вставка в целевую таблицу, RecId присваивается значение из временной таблицы + смещение

Если делать это все через прямую вставку в таблицу, то посчитать кол-во записей перед вставкой все равно придется, но между расчетом и вставкой пройдет какое-то время, за которое могут быть вставлены новая записи в исходную таблицу, соответствующие поисковому запросу. И значение в systemSequences разъедется с реальным в таблице.
Что бы этого избежать, придется запускать сериализуемую транзакцию, которая очень легко может заблокировать всю исходную таблицу на момент операции (да и не сталкивался я в DAX с использованием таких транзакций)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (3).
Старый 25.08.2011, 12:59   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо за ответы.
Все прояснилось.
Пожалуй отключать и не надо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Временные таблицы и их временные файлы AraraT® DAX: Прочие вопросы 6 12.04.2010 00:39
insert recordset join таблицы без вывода поля Varmen DAX: Программирование 7 25.09.2009 14:15
Вопрос по insert_recordset vvk DAX: Программирование 25 07.05.2009 06:50
Осторожно insert_recordset MikeR DAX: Программирование 11 28.04.2009 17:27
Не работает Insert_Recordset Yprit DAX: Программирование 21 06.10.2004 12:02

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:31.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.