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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2010, 13:36   #21  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Да просто давныыым-давно сталкивался именно с подобной проблемой. Например, при сводном планировании нужны InventSumLogTTS (много времени прошло, могу не помнить точно), а после - ну что с ними далать? а они расползались...

Короче, подобным способом и решили проблему. Или периодическую очистку делали?

С Уважением,
Георгий
Старый 23.04.2010, 14:13   #22  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Да просто давныыым-давно сталкивался именно с подобной проблемой. Например, при сводном планировании нужны InventSumLogTTS (много времени прошло, могу не помнить точно), а после - ну что с ними далать? а они расползались...
Эээээ а команды типа TRUNCATE TABLE не пробовали? Быстро работают

Тут другая ситуация. Грузят данные. Они актуальны (например данные с магазинов). Потом (например, в течении дня) присылают откорректированные данные (кто-то ошибся). Старые данные еще не обрабатывали (они автоматически закачались, но их обработка будет к примеру на след. день). Соотв - старые данные нужно стереть, а новые закачать.

Я с подобной потребностью сталкивался при импорте строк выписки. Сотрудник заказывает предварительную (по операциям текущего дня) выписку и получает ее (включая автозагрузку в АХ). Банк кстати вполне может пойти навстречу по такой услуге, особенно если это свой банк . Затем (на след. день) выписка приходит уже окончательная. Соотв - предварительная выписка в АХ не обрабатывается в тот же день. Куда деть предварительную выписку? Стереть.

А теперь считаем, что фирма (холдинг) у нас состоит не из одного юрлица и не одного расчетного счета... Да и операций у нас много.... В общем - объемно получается
__________________
Возможно сделать все. Вопрос времени
Старый 23.04.2010, 14:41   #23  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Да подожди ты таблицы резать

Надо сначала найти источник проблемы.
1. Понять какие данные нужны.
2. Когда они устаревают.
3. На что эти данные влияют? Не пригодяться ли удаленные данные впоследствии? Связи.
4. Можно ли это решить настройками. Или, например переносить в другой журнал и удалять.
5. Если нельзя программно, то сколько времени займет доработка.
6. Можно ли запускать данную процедуру на периодической основе.

А программистам сразу бы drop table


Георгий
Старый 23.04.2010, 16:46   #24  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Переделал на удаление через delete_from по частям (по 100000 записей)
Удаление 600000 записей - 1 час, удаление 1200000 записей - 2 часа
Удаление 600000 записей напрямую в SQL Server Management Studio - 16 минут.
Собственно, почему я не хотел использовать delete_from, надеялся, что будет работать быстрее, но, похоже, не судьба...
Старый 23.04.2010, 16:59   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Переделал на удаление через delete_from по частям (по 100000 записей)
Удаление 600000 записей - 1 час, удаление 1200000 записей - 2 часа
Удаление 600000 записей напрямую в SQL Server Management Studio - 16 минут.
Собственно, почему я не хотел использовать delete_from, надеялся, что будет работать быстрее, но, похоже, не судьба...
Такая разница во времени означает прежде всего, что в Аксапте операция удаления выполняет больше действий, чем в SQL Server Management Studio.

В Аксапте отрабатывается каскадное удаление (или запрет удаления) и так далее.
Вам Shirmin Oleg, неоднокрартно говорилось, а вы не слушаете. Что delete_from работает с точно такой же скоростью, что и команда из SQL Server Management Studio, если не нужно выполнять дополнительных действий и проверок.

Почитайте наконец http://msdn.microsoft.com/en-us/library/aa849875.aspx

И вместо того, чтобы "надеятся", просто разберитесь со своими настройками в Аксапте. Уберите лишние действия/настройки. И будет вам такая же скорость.

Если же некоторые настройки лишними не являются, то своей суперскоростной командой из SQL Server Management Studio вы просто нарушаете целостность данных.
__________________
полезное на axForum, github, vk, coub.
Старый 23.04.2010, 17:12   #26  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Delete actions на данной таблице нет, метод delete не перекрыт, перед удалением есть след код:
X++:
          table.skipDatabaseLog(true);
          table.skipDeleteActions(true);
          table.skipDeleteMethod(true);
Хотя это в данном случае излишне.

Уважаемый Mazzy, подскажите, пожалуйста, с какими еще настройками я "должен разобраться"?
Старый 23.04.2010, 18:00   #27  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Переделал на удаление через delete_from по частям (по 100000 записей)
Каким образом реализовали удаление по частям? Индекс соответствующий условию выборки присутствует? Если не по частям а за один раз, то так же долго?
Старый 23.04.2010, 18:12   #28  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Каким образом реализовали удаление по частям?
В цикле проверяю наличие записей за нужный период, находу самый младший recid, запускаю delete_from с ограничением по периоду и от младшего recid, до += размер удаляемого блока записей (recid идут подряд, т.к. таблица заполняется в один прием), после этого опять проверяю наличие записей в таблице

Цитата:
Индекс соответствующий условию выборки присутствует?
Есть индекс по recid и (неуникальный) по периоду

Цитата:
Если не по частям а за один раз, то так же долго?
Если за один раз, то еще дольше (примерно раза в два)
Старый 23.04.2010, 19:23   #29  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Попробуйте посмотреть какой SQL запрос уходит в БД

И ещё пальцем в небо. RLS на удаляемой таблице не настроено?
Старый 23.04.2010, 23:33   #30  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Delete actions на данной таблице нет, метод delete не перекрыт, перед удалением есть след код:
X++:
          table.skipDatabaseLog(true);
          table.skipDeleteActions(true);
          table.skipDeleteMethod(true);
Хотя это в данном случае излишне.

Уважаемый Mazzy, подскажите, пожалуйста, с какими еще настройками я "должен разобраться"?
таблица в map'ах присутствует?
таблица во view перечислена?
таблица входит в виртуальные компании?

вообще говоря, это офигенно странный способ задавать вопросы: типа, перчислите все что у меня может быть.

Блин, расскажите по-человечески что вы там делаете.
То, что вы делаете skip перед удалением вообще только сейчас всплыло.
Разбирайтесь.

Цитата:
Сообщение от mazzy Посмотреть сообщение
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
И ещё пальцем в небо. RLS на удаляемой таблице не настроено?
и это проверьте.

Барабашки нет!
Посмотрите какие запросы уходят из Аксапты в вашем случае.
Разберитесь почему так и из-за каких настроек.

ЕЩЕ РАЗ: вам было истинно сказано в самом начале:
Цитата:
Сообщение от lev Посмотреть сообщение
delete_from должно удалить данные одним запросом к базе, т.е. делает тоже самое, что Вы делает через CCADOConnection.
просто вы слушать не хотите.
__________________
полезное на axForum, github, vk, coub.
Старый 23.04.2010, 23:42   #31  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
кроме того, первоначальный запрос
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
X++:
  sql = strfmt("delete from SALESTABLE_TONTRA40478 where SALESTABLE_TONTRA40478.month = '%1'", date2str(01\03\2010, 321, 2, 3, 2, 3, 4));
по-моему, удаляет данные изо всех компаний.
а delete_from только из текущей.

вы можете по человечески описать что делаете, с какими условиями, какие настройки, какие запросы уходят у вас на SQL в результате команды delete_from и т.п.
__________________
полезное на axForum, github, vk, coub.
Старый 27.04.2010, 11:10   #32  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
RLS на удаляемой таблице не настроено?
Нет, не настроено.
Таблицы в map'ах нет, во view тоже не используется, в вирт. комп. не входит

X++:
  table.skipDatabaseLog(true);
  table.skipDeleteActions(true);
  table.skipDeleteMethod(true);

  delete_from table where table.Month == _month;
После того, как отрабатывает удаление (delete_from), в лог все равно происходит вставка:

Трассировка SQL
X++:
DELETE FROM SALESTABLE_TELECOMPHONTRA40478 WHERE ((DATAAREAID=?) AND (MONTH=?))

INSERT INTO SYSDATABASELOG (DATA,USERNAME,DESCRIPTION,LOGTYPE,TABLE_,LOGRECID,CREATEDBY,CREATEDTRANSACTIONID,DATAAREAID,RECVERSION,RECID) VALUES (?,?,?,?,?,?,?,?,?,?,?);SELECT CREATEDDATETIME FROM SYSDATABASELOG WHERE RECID = ? AND DATAAREAID = ?
Естественно, при удалении через SQL Management этой вставки нет.
Старый 27.04.2010, 11:27   #33  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А тормоза при удалении или при вставке?

С Уважением,
Георгий
Старый 27.04.2010, 11:36   #34  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Нет, не настроено.
Таблицы в map'ах нет, во view тоже не используется, в вирт. комп. не входит

X++:
  table.skipDatabaseLog(true);
...
После того, как отрабатывает удаление (delete_from), в лог все равно происходит вставка...
Очень странно... skipDatabaseLog(true) вызывается именно для того что бы исключить эту вставку... У меня Ахарта 3.0 SP3, и лог таким способом нормально отключается. Возможно это уже новшества в 4.0 и 2009, или что - то где то допилено, что бы эта вставка была в любом случае.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.04.2010, 12:08   #35  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Трассировку проверял в 2009, никаких допиливаний для того, чтобы в SysDataBaseLog вставка была в любом случае нет.
Старый 27.04.2010, 12:13   #36  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
После того, как отрабатывает удаление (delete_from), в лог все равно происходит вставка:
А в лог заносится запись именно об удалении строки из SALESTABLE_TELECOMPHONTRA40478?
Чему равны поля LOGTYPE и TABLE_?
Старый 27.04.2010, 12:43   #37  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение

После того, как отрабатывает удаление (delete_from), в лог все равно происходит вставка:
Вы можете по-человечески и полностью показать код?
__________________
полезное на axForum, github, vk, coub.
Старый 27.04.2010, 14:20   #38  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
А в лог заносится запись именно об удалении строки из SALESTABLE_TELECOMPHONTRA40478?
Чему равны поля LOGTYPE и TABLE_?
В 4.0 в лог вообще ничего не пишется.
В 2009 в лог пишется после каждой отработки delete_from (один раз на один удаляемый блок). LogType = Delete, Table - 40478 (ид. SALESTABLE_TELECOMPHONTRA40478) Так что запись в лог не тормозит, тормозит сам delete_from.

X++:
  SALESTABLE_TELECOMPHONTRA40478 table;      
  int64                                    firstRecid, lastRecid;
  int                                      count2Del = 100000;
  ;
  select count(recid) from table where table.Month == _month;
  if(table.RecId > count2Del)
        {
          while (true)
            {
              if((select firstOnly TELECOMPHONTRA40478 where              TELECOMPHONTRA40478.month == _month).recid != 0)
                {
                  select minof(recid) from table where table.Month == _month;
                  firstRecid = table.RecId;
                  lastRecid = firstRecid + count2Del;
                  select maxof(recid) from table where table.month == _month;
                  if(table.RecId < lastRecid)
                    lastRecid = table.RecId;

                  table.skipDatabaseLog(true);
                  table.skipDeleteActions(true);
                  table.skipDeleteMethod(true);

                  delete_from table where table.Month == _month && table.RecId >= firstRecid && table.RecId <= lastRecid;
                }
              else
                break;
            }
        }
      else
        {
          table.skipDatabaseLog(true);
          table.skipDeleteActions(true);
          table.skipDeleteMethod(true);

          delete_from table where table.Month == _month;
        }
Старый 27.04.2010, 14:48   #39  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А сколько времени удаляются из AX 600000 записей (не по частям) ?
X++:
table.skipDatabaseLog(true);
delete_from table where table.Month == _month;
__________________
Sergey Nefedov
Старый 27.04.2010, 15:11   #40  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А если ради эксперимента отключить через Администрирование логирование удалений в этой таблице?

P.S. Mazzy, а вы говорили, что у меня код сложный
Массовое удаление записей через CCADOConnection
Теги
ax2009, ccadoconnection, delete_from, оптимизация, удаление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задвоение RecId при вставке записей через COM коннектор db DAX: Программирование 1 23.04.2009 15:12
Класс OfficialsServ_RU - удаление записей из OfficialsTrans_RU Logger DAX: Программирование 3 14.09.2006 15:58
Запуск программы из Аксапты через 2-хзвенку Migel_84 DAX: Программирование 25 27.04.2006 09:41
Проблема с запуском business connector'a через удал доступ yooshi DAX: Программирование 1 07.11.2005 08:56
Удаление записей из InventDim и SalesTable DreamCreator DAX: Программирование 4 08.12.2004 17:23
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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