24.05.2006, 12:06 | #1 |
Ищу людей. Дорого.
|
Очистка лога изменения складских приемок
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
Здесь - http://axapta.mazzy.ru/lib/dbgrowthsolution/ прочитал про очистку базы Теперь собственно к делу В таблице InventSumLogTTS - около 15000000 записей. Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел На живой базе я мебе конечно такого позволить не смогу Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.? |
|
25.05.2006, 14:01 | #2 |
Участник
|
(имеется в виду 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)). |
|
25.05.2006, 15:07 | #3 |
Ищу людей. Дорого.
|
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей? |
|
26.05.2006, 13:04 | #4 |
злыдень
|
InventSumLogTTS
Мы чистим иногда. Когда систему на профилактику останавливаем - трункейт её и все дела. Для чего она - то ли забыл, то ли не знаю.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
26.05.2006, 14:53 | #5 |
Ищу людей. Дорого.
|
Жестокий метод ((
|
|
26.05.2006, 15:34 | #6 |
Участник
|
Цитата:
Сообщение от sergeypp
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей? Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl таким образом : PHP код:
Посмотрите еще метод insertInventSumLogTTS() класса InventUpdateTTSControl и метод deleteCommittedItemId() таблицы InventSumLogTTS я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No Если это так то тогда можно просто сделать truncate Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ. |
|
26.05.2006, 15:55 | #7 |
Участник
|
Цитата:
Сообщение от Logger
Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую
исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl таким образом : PHP код:
Если эти модуль сводное планирование не используется - просто выключите лицензию. Когда будет использоваться - включите лицензию. Это надежный и не зависящий от программистов способ. TTS-таблицы, насколько я помню, используются только в сводном планировании при расчете динамического сводного плана. IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц. Посмотрите в перекрестные ссылки, чтобы убедится достоверно. Не программируйте. |
|
26.05.2006, 15:56 | #8 |
Участник
|
Кстати, если уж так хочется бороться со следствием, а не с причиной, то не программируйте новые сущности, а просто используйте класс InventUpdateTTSCleanup.
|
|
26.05.2006, 15:58 | #9 |
Ищу людей. Дорого.
|
Спасибо, буду пробовать
|
|
26.05.2006, 18:00 | #10 |
Участник
|
Цитата:
Сообщение от mazzy
IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.
см. метод insertInventSumLogTTS() класса InventUpdateTTSControl сначала идут проверки PHP код:
В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции. P.S. см. также PHP код:
PHP код:
PHP код:
Последний раз редактировалось Logger; 26.05.2006 в 18:05. |
|
|
За это сообщение автора поблагодарили: mazzy (15). |
26.05.2006, 18:13 | #11 |
злыдень
|
Цитата:
Сообщение от Logger
В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции. Вся эта хрень не плодилась бы напрасно ))
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
26.05.2006, 18:15 | #12 |
Участник
|
Цитата:
Сообщение от Logger
не совсем так...
см. метод insertInventSumLogTTS() класса InventUpdateTTSControl ... а потом идет код по вставке записей. В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании).... 1. Приятно общаться с человеком, который знает и умеет обосновать. 2. Да, я действительно написал небрежно и неправильно Неправильно: Цитата:
IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.
Цитата:
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))); } Предлагаю сосредоточиться таки на проблеме автора Цитата:
Сообщение от sergeypp
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
|
|
26.05.2006, 18:38 | #13 |
Участник
|
Действительно удаляются.
Это радует. |
|
27.05.2006, 09:22 | #14 |
Member
|
Цитата:
Сообщение от sergeypp
...
Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел На живой базе я мебе конечно такого позволить не смогу ... А у вас описанное вами время было затрачено на удаление? Или сводное планирование у вас тоже настроено (и оно пыталось рассчитаться)? Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId() Я им никогда не пользовался, но на форуме его упоминали. Да и при запуске сводного планирования оно каждый раз запускается. Цитата:
Сообщение от sergeypp
...
Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.? ... После этого ОБЯЗАТЕЛЬНО: - Либо корректно настройте и регулярно запускайте (не реже раза в неделю) сводное планирование. Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы. - Либо отключите лицензию на сводное планирование. А вообще об этом уже не раз писали на форуме. Правда, в разных местах (и в данной дискуссии тоже).
__________________
С уважением, glibs® |
|
29.05.2006, 14:31 | #15 |
Ищу людей. Дорого.
|
Цитата:
Сообщение от glibs
Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId()
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы Цитата:
Сообщение от glibs
Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы.
|
|
30.05.2006, 01:24 | #16 |
Участник
|
Цитата:
Сообщение от sergeypp
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы
|
|
30.05.2006, 09:21 | #17 |
Ищу людей. Дорого.
|
у нас одна - спасибо
|
|
16.01.2008, 10:56 | #18 |
Участник
|
Цитата:
Сообщение от Logger
и метод deleteCommittedItemId() таблицы InventSumLogTTS
я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No Если это так то тогда можно просто сделать truncate Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ. Есть импорт из внешней базы. За 30 минут импортируется большое количество строк заказов и журналов. Точно не считал сколько. Но не в этом дело. inventSumLogTTS забивается конкретно. Потом запускаем сводное планировани. В сводном планирование почти сразу вызывается deleteCommittedItemId() таблицы InventSumLogTTS Так вот вопрос может на insert этой таблицы повесить проверку if (inventSumLogTTS.IsCommitted == noYes::Yes ) return; Так время сэкономлю и на insert этой таблицы и ещё больше на очистки этой таблицы. Потому что после большого импорта заказов и журналов deleteCommittedItemId() очень долго отрабатывает. Если у кого нибудь есть какие-нибудь возражения или опасения на это решение напишите пожалуйста. Потому что я пока их не вижу. Одна голова хорошо, а целый форум лучше. |
|
16.01.2008, 12:15 | #19 |
Member
|
Цитата:
Сообщение от miklenew
...
Так вот вопрос может на insert этой таблицы повесить проверку if (inventSumLogTTS.IsCommitted == noYes::Yes ) return; ...
__________________
С уважением, glibs® |
|
16.01.2008, 12:30 | #20 |
Участник
|
|
|