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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.11.2005, 15:02   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
? Есть ли выигрыш от RecordInsertList
Дает ли RecordInsertList какое-нибудь увеличение производительности?
Откуда вопрос - Смотрю в SQLProfiler и вижу все тот же набор INSERT INTO.
Старый 23.11.2005, 15:15   #2  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Цитата:
The array insert operation automatically falls back to classic record-by-record inserts when non-SQL based tables are used (e.g. temporary tables), or the insert() method on the table is overloaded (unless explicitly discarded).
Это не ваш случай?
Старый 23.11.2005, 15:27   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
По идее это и есть

insert_recordset, только с ним удобно работать.
Вставляет все сразу - то есть прирост существенный.
Старый 23.11.2005, 15:44   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
to _AnK_ нет не мой. Это точно SQL таблица и точно нет insert.
Единственное отличие, которое я увидел, при использовании RecordInsertList RecId выделяется бОльшими кусками (47) по сравнению с циклическим doInsert (24). Тем не менее, выигрыш на простейшей таблицы в 2 раза.... непонятно

to kashperuk На счет удобства можно поспорить
Старый 23.11.2005, 15:48   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
а что вы конкретно подразумеваете под циклическим doInsert если можно?
Старый 23.11.2005, 15:58   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
PHP код:
static void Job42(Args _args)
{
    
myTable         myTable;
    
RecordInsertList    ril = new RecordInsertList(tableNum(myTable), truetrue);
    
int                 itimeNow();
    ;
    
delete_from myTable;
    
timeNow();
 
    for(
1<= 10000 i++)
    {
        
myTable.clear();
        
myTable.Name int2str(i);
        
myTable.Label int2str(i);
        
ril.add(myTable);
    }
    
ril.insertDatabase();
 
    
info(int2str(timenow() - t));
 
    
delete_from myTable;
    
timeNow();
 
    for(
1<= 10000 i++)
    {
        
myTable.clear();
        
myTable.Name int2str(i);
        
myTable.Label int2str(i);
        
myTable.doInsert();
    }
 
    
info(int2str(timenow() - t));

Старый 23.11.2005, 16:00   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну - так разница то есть -
в первом случае идет только одно обращение к БД - когда делается insertDataBase
А во втором каждая строка по отдельности вставляется.
Старый 23.11.2005, 16:06   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Иван, о чем я и говорю, что ожидал увидеть 1 обращение к БД (хотя совершенно не представляю как это можно сделать на SQL), а вижу все те же 10000.
Старый 23.11.2005, 16:09   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Хм. я честно говоря профайлером так никогда эту функцию и не смотрел. Тогда действительно странно.
Но в хелпе по RecordInsertList написано, что вставка идет именно единоразово. Я им верил - до сегодняшнего дня
Старый 23.11.2005, 16:11   #10  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Может быть в первом случае инсерты выполняются асинхронно.
Старый 23.11.2005, 16:15   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
А что вы собственно ожидали увидеть? Что нибудь типа BULK INSERT?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.11.2005, 16:16   #12  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Цитата:
Сообщение от kashperuk
Но в хелпе по RecordInsertList написано, что вставка идет именно единоразово. Я им верил - до сегодняшнего дня
Там такого не написано
Написано так:

Цитата:
It should, however, be emphasized, that records are inserted whenever the kernel finds the time appropriate, but no later than the call to insertDatabase
Т.е. вставляет когда считает оптимальным, но не позже вызова insertDatabase. Кроме того, за один раз - не значит одной командой.
Старый 23.11.2005, 16:25   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
AndyD, я ожидал увидеть чудо, но его там не оказалось... как обычно
Хотя, остался вопрос, если нет существенной разницы в исполнении вставки, то откуда прирост в 2 раза
Старый 23.11.2005, 16:57   #14  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Wamr
AndyD, я ожидал увидеть чудо, но его там не оказалось... как обычно
Если мне не изменяет склероз, чудо можно было наблюдать на прошлых версиях - там вставка сначала шла во временную таблицу и затем уже
insert into myTable (..) select .. from #tempTable (для сиквела)

похоже, снова что-то заоптимизировали

надо будет проверить на 3.0 без сервиспаков
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.11.2005, 17:03   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Первое что бросилось в глаза - insertDatabase() идет в рамках транзакции. Попробовал стартовать транзакцию перед началом цикла вставки для doInsert() и коммитить после завершения цикла - время вставки уменьшилось в три раза.
__________________
Axapta v.3.0 sp5 kr2
Старый 24.11.2005, 18:34   #16  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
У меня для вышеприведенного примера вообще разница вышла 1 к 15
Старый 24.11.2005, 18:56   #17  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
leshy, какая версия Аксапты и какой sql-сервер?
Старый 24.11.2005, 19:08   #18  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Axapta 3.0 SP3
MSSQL 2000
SQL и АОС на одной машине (Ксеон 2х2,4Ггц)
Старый 16.09.2013, 12:02   #19  
Just_smile is offline
Just_smile
Участник
Axapta Retail User
 
41 / 29 (1) +++
Регистрация: 28.10.2008
Добрый день!
Хотелось поднять эту тему!
Кто-нибудь использует RecordInsertList для массовой вставки строк для повышения производительности в MS DAX 2009? Помогает?
Старый 16.09.2013, 12:50   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,888 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Помогает и еще как.
Cтандартное приложение тоже использует. Cм. например вставку в salesParmTable/salesParmLine
За это сообщение автора поблагодарили: Just_smile (1).
Теги
recordinsertlist, recordsortedlist

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить имена полей, которые есть у таблицы? 3oppo DAX: Программирование 2 22.12.2006 14:30
ALEG: Software-as-a-service есть ли у них будущее в России Blog bot DAX Blogs 0 28.10.2006 16:10
Fullscope - Процессное производство для Axapta есть. mazzy DAX: Функционал 33 28.08.2006 13:22
Есть ли возможность вызывать код с вышележащих слоев ? FishLog DAX: Программирование 5 07.09.2004 17:24
Что есть для Inernet-а ? bucken DAX: Функционал 6 29.10.2003 12:31

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

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

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