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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.01.2021, 14:29   #1  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Я как-то делал отчет, который из журнала базы данных достает историю изменения выбранных полей. Вроде довольно быстро работает на базе в 500 Гб
"Довольно быстро", или "достаточно быстро чтобы непрерывно делать это 10+ раз в минуту", учитывая других читателей-писателей в лог ?
__________________
-ТСЯ или -ТЬСЯ ?

Последний раз редактировалось Vadik; 13.01.2021 в 14:53.
Старый 13.01.2021, 15:37   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от Vadik Посмотреть сообщение
"Довольно быстро", или "достаточно быстро чтобы непрерывно делать это 10+ раз в минуту", учитывая других читателей-писателей в лог ?
Я делал отчет, который парсил контейнер, чтобы достать значения конкретных полей. И еще надо поймать момент изменения именно нужного поля среди прочего мусора. Поэтому основное время уходило на этот парсинг.
А запрос к таблице SysDatabaseLog вроде быстро выполнялся. Прошло уже несколько лет с того времени. По-любому надо пробовать. По-моему это самый простой способ решить данную проблему. А начинать пробовать надо с простых способов.
Хотя все-таки поймать изменение конкретного поля через таблицу SysDatabaseLog - задача не очень тривиальная, но пример как это сделать есть. Даже на этом форуме выкладывали.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 13.01.2021, 15:39   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Запустил у себя сейчас такой джоб.
Для 26 тысяч клиентов он отработал примерно за 2 минуты (если убрать вывод в инфолог)
Это для Аксапты версии 3.0

X++:
static void sysDatabaseLogFieldChangedCustAxForum(Args _args)
{
    CustTable                    custTable;
    SysDatabaseLog               SysDatabaseLog;

    int                          i;
    container                    tmp;

    SysOperationProgress         sysOperationProgress = new SysOperationProgress(1);
    int                          stepCount;
    int                          total;
    UserInfo                    UserInfo;

;
    select count(RecId) from custTable;
    total = custTable.RecId;

    sysOperationProgress.setTotal(total);

    while select custTable
    {
        stepCount ++;
        sysOperationProgress.setCount(stepCount);
        sysOperationProgress.setText(strFmt("%1 запись из %2", stepCount, total));

        while select SysDatabaseLog order by createdDate, createdTime
            where SysDatabaseLog.LogRecId == custTable.RecId
              &&  SysDatabaseLog.table    == custTable.TableId
        {
            if (typeOf(conpeek(SysDatabaseLog.Data, 1)) == Types::Container)
            {
                for ( i = 1; i <= conlen(SysDatabaseLog.data); i ++)
                {
                    tmp = conpeek(SysDatabaseLog.Data, i );
                    if (fieldExt2Id(conpeek(tmp, 1)) == fieldnum(custTable, zResponsibleDivision))
                    {
                        if(conpeek(tmp, 3) != conpeek(tmp, 2))
                        {
                            select firstonly UserInfo where UserInfo.Id == SysDatabaseLog.createdBy;
                            info(strfmt("%1 ~ %2 ~ %3 ~ %4 ~ %5", custTable.AccountNum, UserInfo.name,  SysDatabaseLog.createdDate, conpeek(tmp, 3),conpeek(tmp, 2) ));
                        }
                    }
                }
            }
        }
    }
}
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 13.01.2021 в 15:41.
Старый 13.01.2021, 15:43   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Т.е. 26000 вызовов select для таблицы SysDatabaseLog срабатывают за 2 минуты и плюс еще время на парсинг
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 13.01.2021, 15:48   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
В таблице SysDatabaseLog сейчас 74 миллиона записей. Похоже, что ее перестали обрезать
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 13.01.2021, 15:55   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Автор топика может для своих нужд переписать джоб так, чтобы он отправил всего один запрос к SysDatabaseLog вместо 26 тысяч запросов, но тогда придется усложнить парсинг, чтобы сохранять предыдущие значения полей для каждой записи. Все-таки у него 6 миллионов клиентов, а не 26 тысяч. Но в выборку у него попадут не более нескольких сотен записей, т.к. ему нужны изменения только за последнюю минуту.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Теги
aif, ax2012, change tracking, интеграция, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 Общие справочники поставщиков и клиентов PTG DAX: Функционал 2 11.06.2015 15:39
Импорт адресов для существующих клиентов и поставщиков IKA DAX: Программирование 0 10.12.2013 21:04
ax 3.0 Экспорт справочников во внешнюю систему, по какому ключу связаться? Shakr DAX: Программирование 2 11.11.2008 11:34
Сергей Герасимов: О технической поддержке клиентов по продуктам Microsoft Dynamics Blog bot DAX Blogs 4 13.02.2007 14:58
Коды клиентов в CRM - проблема Zabr DAX: Функционал 5 01.12.2003 12:41

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

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

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