AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 24.05.2006, 12:06   #1  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
! Очистка лога изменения складских приемок
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
Здесь - http://axapta.mazzy.ru/lib/dbgrowthsolution/ прочитал про очистку базы
Теперь собственно к делу
В таблице InventSumLogTTS - около 15000000 записей. Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел
На живой базе я мебе конечно такого позволить не смогу
Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.?
Old 25.05.2006, 14:01   #2  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Join Date: 30.04.2003
Location: Москва
->
(имеется в виду InventSumTTSLog, а не ...LogTTS)

Строки по неподтверждённым транзакциям чистить не советую.
Т. е. это надо отслеживать, а не просто удалять все записи.

Вообще же, лучше эту таблицу чистить каждые N минут или при каждом Application.ttsNotifyCommit(). Записи, относящиеся к rollback (т. е. ttsNotifyAbort()), чистить не надо.
Т. е. делать что-то вроде:
delete_from inventSumTTSLog index hint TTSIdIdx where inventSumTTSLog.TTSId == TTSId;
delete_from inventSumTTSLink index hint TTSIdIdx where inventSumTTSLink.TTSId == TTSId;

TTSId - Id текущей транзакции (подтверждённой) (application.curTransactionId(true)).
Old 25.05.2006, 15:07   #3  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна
На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей?
Old 26.05.2006, 13:04   #4  
Recoilme is offline
Recoilme
злыдень
Recoilme's Avatar
Злыдни
 
895 / 192 (8) ++++++
Join Date: 18.06.2003
InventSumLogTTS
Мы чистим иногда. Когда систему на профилактику останавливаем - трункейт её и все дела. Для чего она - то ли забыл, то ли не знаю.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Old 26.05.2006, 14:53   #5  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
Жестокий метод ((
Old 26.05.2006, 15:34   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by sergeypp
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна
На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей?
Насколько мне известно эта таблица используется при откате транзакции в случае когда включена IMTS (система множественных складских транзакций) и при расчетах в сводном планировании.

Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую
исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl
таким образом :

PHP Code:
boolean forcedCreateInventSumLog()
{
//    return (isConfigurationKeyEnabled(configurationkeynum(req)));
    
return false;


Посмотрите еще метод
insertInventSumLogTTS() класса InventUpdateTTSControl

и метод deleteCommittedItemId() таблицы InventSumLogTTS
я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No

Если это так то тогда можно просто сделать truncate

Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ.
Old 26.05.2006, 15:55   #7  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by Logger
Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую
исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl
таким образом :

PHP Code:
boolean forcedCreateInventSumLog()
{
//    return (isConfigurationKeyEnabled(configurationkeynum(req)));
    
return false;

Не правьте код.
Если эти модуль сводное планирование не используется - просто выключите лицензию.
Когда будет использоваться - включите лицензию.

Это надежный и не зависящий от программистов способ.

TTS-таблицы, насколько я помню, используются только в сводном планировании при расчете динамического сводного плана.

IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.

Посмотрите в перекрестные ссылки, чтобы убедится достоверно.

Не программируйте.
__________________
полезное на axForum, github, vk, coub.
Old 26.05.2006, 15:56   #8  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Кстати, если уж так хочется бороться со следствием, а не с причиной, то не программируйте новые сущности, а просто используйте класс InventUpdateTTSCleanup.
__________________
полезное на axForum, github, vk, coub.
Old 26.05.2006, 15:58   #9  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
Спасибо, буду пробовать
Old 26.05.2006, 18:00   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by mazzy
IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.
не совсем так...

см. метод insertInventSumLogTTS() класса InventUpdateTTSControl

сначала идут проверки

PHP Code:
    mustUseTTSSystem this.mustUseTTSSystem();

    if (!
mustUseTTSSystem && !this.forcedCreateInventSumLog())
        return;

    if (
mustUseTTSSystem && (!this.dBConnectionUpd() || !TTSLevel_Upd || !appl.ttsLevel()))
        throw 
error(strfmt("@SYS69842",funcname()));

    if (
mustUseTTSSystem)
        
inventSumLogTTS.setConnection(this.dBConnectionUpd()); 
а потом идет код по вставке записей.

В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции.

P.S.
см. также
PHP Code:
// класс InventUpdateTTSControl
/*
Used all over to detect whether TTSSystem is active.
If method setTTSMode has not been called before first call to this method, it will default to
"Standard" which means that TTSSystem is not active. Generally method setTTSMode is called when
instantiating class hierarchy InventUpdate
*/
public boolean mustUseTTSSystem()
{
    if (
TTSMode == InventUpdateTTSMode::UnDecided && appl.ttsLevel())
        
TTSMode InventUpdateTTSMode::Standard;

    if (!
InventUpdateTTSControl::tTSSystemEnabled())
        return 
false;

    return 
TTSMode == InventUpdateTTSMode::TTSsystem true false;

PHP Code:
// класс InventUpdate
void new(InventMovement _inventMovement)
{

    
movement        _inventMovement;
    if (! 
movement.transId())
        throw 
error("@SYS17272");

    
appl.inventUpdateTTSControl().setTTSMode (movement.mustUseInventUpdateTTSSystem());


PHP Code:
// класс InventMovement
boolean mustUseInventUpdateTTSSystem()
{
    
boolean useTTSSystem;
    ;
    
useTTSSystem this.buffer().isFormDataSource() ? false true;
    return 
useTTSSystem;


Last edited by Logger; 26.05.2006 at 18:05.
This post has been rated by: mazzy (15).
Old 26.05.2006, 18:13   #11  
Recoilme is offline
Recoilme
злыдень
Recoilme's Avatar
Злыдни
 
895 / 192 (8) ++++++
Join Date: 18.06.2003
Quote:
Originally Posted by Logger

В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции.
Действительно, если бы акзапта умела корректно восстанавливать остатки при включенном IMTS ...

Вся эта хрень не плодилась бы напрасно ))
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Old 26.05.2006, 18:15   #12  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by Logger
не совсем так...
см. метод insertInventSumLogTTS() класса InventUpdateTTSControl

...

а потом идет код по вставке записей.

В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании)....
Спасибо.
1. Приятно общаться с человеком, который знает и умеет обосновать.
2. Да, я действительно написал небрежно и неправильно
Неправильно:
Quote:
IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.
Правильно:
Quote:
IMTS, насколько я помню, оставляет записи в TTS таблицах только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS удаляет записи в этих таблицах.
См.
\Classes\InventUpdateTTSCleanup\commitTransaction
\Classes\InventUpdateTTSCleanup\rollBackTransaction

X++:
        if (appl.inventUpdateTTSControl().forcedCreateInventSumLog())
        {
            update_recordset inventSumLogTTS setting isCommitted = 1
                where inventSumLogTTS.TTSId == TTSId && inventSumLogTTS.IsCommitted == 0;
        }
        else
        {
            delete_from inventSumLogTTS
                where inventSumLogTTS.TTSId == TTSId && inventSumLogTTS.IsCommitted == 0;
        }
X++:
boolean forcedCreateInventSumLog()
{
    return (isConfigurationKeyEnabled(configurationkeynum(req)));
}

Предлагаю сосредоточиться таки на проблеме автора
Quote:
Originally Posted by sergeypp
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
Простое решение - отключите модуль Сводное планирование, если оно у вас не используется. Режим работы с IMTS не влияет на решение этой проблемы.
__________________
полезное на axForum, github, vk, coub.
Old 26.05.2006, 18:38   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Talking
Действительно удаляются.
Это радует.
Old 27.05.2006, 09:22   #14  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Join Date: 10.06.2002
Location: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Quote:
Originally Posted by sergeypp
...
Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел
На живой базе я мебе конечно такого позволить не смогу
...
С настолько запущенными случаями я пока не сталкивался, но поряддка 3,000,000 записей у меня из таблицы удалялись относительно недолго в результате запуска сводного планирования (не больше 30 минут на сервере).

А у вас описанное вами время было затрачено на удаление? Или сводное планирование у вас тоже настроено (и оно пыталось рассчитаться)?

Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId()

Я им никогда не пользовался, но на форуме его упоминали. Да и при запуске сводного планирования оно каждый раз запускается.
Quote:
Originally Posted by sergeypp
...
Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.?
...
Если у вас проблема в производительности сервера (на операции удаления ззаписей из таблицы InventSumLogTTS), то можете попробовать написать прямой запрос на SQL сервер по принципу, который описан в InventSumLogTTS::deleteCommittedItemId() (т.е. установив фильтр по полям IsCommitted и DataAreaId). Перед запуском запроса удалите все индексы на таблице InventSumLogTTS. После отработки запроса сделайте на таблице синхронизацию. Естественно, экзекуцию следует проводить, когда с базой не работают пользователи.

После этого ОБЯЗАТЕЛЬНО:
- Либо корректно настройте и регулярно запускайте (не реже раза в неделю) сводное планирование. Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы.
- Либо отключите лицензию на сводное планирование.

А вообще об этом уже не раз писали на форуме. Правда, в разных местах (и в данной дискуссии тоже).
__________________
С уважением,
glibs®
Old 29.05.2006, 14:31   #15  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
Quote:
Originally Posted by glibs
Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId()
Там стоит условие на подтверждение завершении транзакции.
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы

Quote:
Originally Posted by glibs
Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы.
А про этот случай можно немножко по-подробнее?
Old 30.05.2006, 01:24   #16  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by sergeypp
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы
Можете, однако помните, что truncate всегда удаляет записи во всех компаниях, а не только в текущей.
__________________
полезное на axForum, github, vk, coub.
Old 30.05.2006, 09:21   #17  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
sergeypp's Avatar
 
433 / 174 (6) ++++++
Join Date: 08.11.2003
Location: Казань
у нас одна - спасибо
Old 16.01.2008, 10:56   #18  
miklenew is offline
miklenew
Участник
miklenew's Avatar
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 438 (18) +++++++
Join Date: 10.07.2006
Location: г. Ликино-Дулёво
Quote:
Originally Posted by Logger View Post
и метод deleteCommittedItemId() таблицы InventSumLogTTS
я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No

Если это так то тогда можно просто сделать truncate

Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ.
Тоже сталкнулся с этой проблемой.
Есть импорт из внешней базы.
За 30 минут импортируется большое количество строк заказов и журналов.
Точно не считал сколько. Но не в этом дело. inventSumLogTTS забивается конкретно.
Потом запускаем сводное планировани.
В сводном планирование почти сразу вызывается deleteCommittedItemId() таблицы InventSumLogTTS
Так вот вопрос может на insert этой таблицы повесить проверку
if (inventSumLogTTS.IsCommitted == noYes::Yes )
return;
Так время сэкономлю и на insert этой таблицы и ещё больше на очистки этой таблицы. Потому что после большого импорта заказов и журналов deleteCommittedItemId() очень долго отрабатывает.
Если у кого нибудь есть какие-нибудь возражения или опасения на это решение напишите пожалуйста. Потому что я пока их не вижу.
Одна голова хорошо, а целый форум лучше.
Old 16.01.2008, 12:15   #19  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Join Date: 10.06.2002
Location: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Quote:
Originally Posted by miklenew
...
Так вот вопрос может на insert этой таблицы повесить проверку
if (inventSumLogTTS.IsCommitted == noYes::Yes )
return;
...
Я не проверял, но первым делом проверил бы, не происходит ли так, что при insert() inventSumLogTTS.IsCommitted == noYes::No, а при update inventSumLogTTS.IsCommitted == noYes::Yes.
__________________
С уважением,
glibs®
Old 16.01.2008, 12:30   #20  
miklenew is offline
miklenew
Участник
miklenew's Avatar
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 438 (18) +++++++
Join Date: 10.07.2006
Location: г. Ликино-Дулёво
Quote:
Originally Posted by glibs View Post
Я не проверял, но первым делом проверил бы, не происходит ли так, что при insert() inventSumLogTTS.IsCommitted == noYes::No, а при update inventSumLogTTS.IsCommitted == noYes::Yes.
Проверял. При insert-e Yes.
Tags
производительность, складские проводки

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Сводное планирование - изменения&изменения мин. Alexm DAX: Прочие вопросы 1 05.04.2005 10:43
Глюк : не сохраняются изменения в коде Logger DAX: Администрирование 2 31.01.2005 12:02
Очистка складских журналов dyatlowsky DAX: Функционал 0 26.03.2004 17:55
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 21:27.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.