25.08.2011, 11:42 | #1 |
Участник
|
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 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: Logger (3). |
25.08.2011, 12:30 | #3 |
Участник
|
Насколько я понимаю, связано это с генерацией и вставкой значения RecId.
Т.е. сначала сохраняются записи во временную таблицу - получается кол-во записей для вставки (при этом, recId присваивается увеличивающее значение, начиная с единицы). Затем, выделяется нужный диапазон в systemSequences Далее, происходит вставка в целевую таблицу, RecId присваивается значение из временной таблицы + смещение Если делать это все через прямую вставку в таблицу, то посчитать кол-во записей перед вставкой все равно придется, но между расчетом и вставкой пройдет какое-то время, за которое могут быть вставлены новая записи в исходную таблицу, соответствующие поисковому запросу. И значение в systemSequences разъедется с реальным в таблице. Что бы этого избежать, придется запускать сериализуемую транзакцию, которая очень легко может заблокировать всю исходную таблицу на момент операции (да и не сталкивался я в DAX с использованием таких транзакций)
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (3). |
25.08.2011, 12:59 | #4 |
Участник
|
Спасибо за ответы.
Все прояснилось. Пожалуй отключать и не надо. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Временные таблицы и их временные файлы | 6 | |||
insert recordset join таблицы без вывода поля | 7 | |||
Вопрос по insert_recordset | 25 | |||
Осторожно insert_recordset | 11 | |||
Не работает Insert_Recordset | 21 |
|