![]() |
#1 |
Ищу людей. Дорого.
|
![]()
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
Здесь - http://axapta.mazzy.ru/lib/dbgrowthsolution/ прочитал про очистку базы Теперь собственно к делу В таблице InventSumLogTTS - около 15000000 записей. Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел На живой базе я мебе конечно такого позволить не смогу Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.? |
|
![]() |
#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)). |
|
![]() |
#3 |
Ищу людей. Дорого.
|
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей? |
|
![]() |
#4 |
злыдень
|
InventSumLogTTS
Мы чистим иногда. Когда систему на профилактику останавливаем - трункейт её и все дела. Для чего она - то ли забыл, то ли не знаю.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#5 |
Ищу людей. Дорого.
|
Жестокий метод ((
|
|
![]() |
#6 |
Участник
|
Quote:
Originally Posted by sergeypp
InventSumTTSLog - такой таблицы нет, зато есть InventSumLogTTS - в ней 15 млн записей и она весит 5 Гигов.
Где можно почитать про эту таблицу и для чего она нужна На форуме mazzy - я тоже поднял эту тему. Мне ответили, что нужно отключить лицензию на свободное планирование. Возникает вопрос, как может отразиться отключение на функциональность других модулей? Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl таким образом : PHP Code:
Посмотрите еще метод insertInventSumLogTTS() класса InventUpdateTTSControl и метод deleteCommittedItemId() таблицы InventSumLogTTS я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No Если это так то тогда можно просто сделать truncate Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ. |
|
![]() |
#7 |
Участник
|
Quote:
Originally Posted by Logger
Если у вас не используется IMTS и сводное планирование (либо если вы реально им не пользуетесь) то рекомендую
исправить метод forcedCreateInventSumLog() класса InventUpdateTTSControl таким образом : PHP Code:
Если эти модуль сводное планирование не используется - просто выключите лицензию. Когда будет использоваться - включите лицензию. Это надежный и не зависящий от программистов способ. TTS-таблицы, насколько я помню, используются только в сводном планировании при расчете динамического сводного плана. IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц. Посмотрите в перекрестные ссылки, чтобы убедится достоверно. Не программируйте. ![]() |
|
![]() |
#8 |
Участник
|
Кстати, если уж так хочется бороться со следствием, а не с причиной, то не программируйте новые сущности, а просто используйте класс InventUpdateTTSCleanup.
|
|
![]() |
#9 |
Ищу людей. Дорого.
|
Спасибо, буду пробовать
|
|
![]() |
#10 |
Участник
|
Quote:
Originally Posted by mazzy
IMTS, насколько я помню, поддерживает работу TTS таблиц только в том случае, если включен модуль сводного планирования. Если модуль Сводное планирование выключен, то IMTS отлично обходится и без этих таблиц.
см. метод insertInventSumLogTTS() класса InventUpdateTTSControl сначала идут проверки PHP Code:
В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции. P.S. см. также PHP Code:
PHP Code:
PHP Code:
Last edited by Logger; 26.05.2006 at 18:05. |
|
|
This post has been rated by: mazzy (15). |
![]() |
#11 |
злыдень
|
Quote:
Originally Posted by Logger
В общем видно что при включенной IMTS и при работе не из формы - записи отлично вставляются (даже при выключенном сводном планировании). Если бы не так, то при откате транзакции аксапта не смогла бы корректно восстановить значения остатков в InventSum, так как каждая строка обрабатывается при этом в отдельной транзакции. Вся эта хрень не плодилась бы напрасно ))
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
![]() |
#12 |
Участник
|
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
База растет с угрожающей скоростью (слежу по размерам архивов бакапов)
|
|
![]() |
#13 |
Участник
|
![]()
Действительно удаляются.
Это радует. ![]() |
|
![]() |
#14 |
Member
|
Quote:
Originally Posted by sergeypp
...
Пытался на тестовой очистить через Сводное планирование - ждал больше суток - процесс далеко не ушел На живой базе я мебе конечно такого позволить не смогу ... А у вас описанное вами время было затрачено на удаление? Или сводное планирование у вас тоже настроено (и оно пыталось рассчитаться)? Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId() Я им никогда не пользовался, но на форуме его упоминали. Да и при запуске сводного планирования оно каждый раз запускается. Quote:
Originally Posted by sergeypp
...
Можно ли эту таблицу очистить посредством скуля, delete или truncate. Есть ли связанные записи с этой таблицей, что бы их тоже грохнуть.? ... После этого ОБЯЗАТЕЛЬНО: - Либо корректно настройте и регулярно запускайте (не реже раза в неделю) сводное планирование. Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы. - Либо отключите лицензию на сводное планирование. А вообще об этом уже не раз писали на форуме. Правда, в разных местах (и в данной дискуссии тоже).
__________________
С уважением, glibs® |
|
![]() |
#15 |
Ищу людей. Дорого.
|
Quote:
Originally Posted by glibs
Если сводное плланирование настроено, то обратите внимание на AOT\...\Tables\InventSumLogTTS::deleteCommittedItemId()
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы Quote:
Originally Posted by glibs
Если расчет сводного плана вы не используете, но сводное планирование выключать не хотите (у меня лично был такой случай), то настройте сводное планирование таким образом, чтобы оно ничего не планировало. Тогда оно только будет удалять транзакцтонные таблицы.
|
|
![]() |
#16 |
Участник
|
Quote:
Originally Posted by sergeypp
Если у меня все транзакции завершены, могу ли я просто сделать truncate таблицы
|
|
![]() |
#17 |
Ищу людей. Дорого.
|
у нас одна - спасибо
|
|
![]() |
#18 |
Участник
|
Quote:
Originally Posted by Logger
![]() и метод deleteCommittedItemId() таблицы InventSumLogTTS
я думаю, что если выгнать всех пользователей из базы и остановить АОС то почти наверняка в это таблице не будет записей со значением inventSumLogTTS.IsCommitted == noYes::No Если это так то тогда можно просто сделать truncate Если же такие записи есть (обычно их немного) то лучше их скопировать куда нить, затранкейтить inventSumLogTTS а потом вставить эти записи обратно. Это самый быстрый способ. Есть импорт из внешней базы. За 30 минут импортируется большое количество строк заказов и журналов. Точно не считал сколько. Но не в этом дело. inventSumLogTTS забивается конкретно. Потом запускаем сводное планировани. В сводном планирование почти сразу вызывается deleteCommittedItemId() таблицы InventSumLogTTS Так вот вопрос может на insert этой таблицы повесить проверку if (inventSumLogTTS.IsCommitted == noYes::Yes ) return; Так время сэкономлю и на insert этой таблицы и ещё больше на очистки этой таблицы. Потому что после большого импорта заказов и журналов deleteCommittedItemId() очень долго отрабатывает. Если у кого нибудь есть какие-нибудь возражения или опасения на это решение напишите пожалуйста. Потому что я пока их не вижу. Одна голова хорошо, а целый форум лучше. ![]() |
|
![]() |
#19 |
Member
|
Quote:
Originally Posted by miklenew
...
Так вот вопрос может на insert этой таблицы повесить проверку if (inventSumLogTTS.IsCommitted == noYes::Yes ) return; ...
__________________
С уважением, glibs® |
|
![]() |
#20 |
Участник
|
|
|
Tags |
производительность, складские проводки |
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread |
Display Modes | |
|