23.12.2010, 16:09 | #161 |
Member
|
Цитата:
Сообщение от DPO
...
Проблема в том, что RecId могут переполниться даже за год! ... По прогнозам на следующий год RecId не хватит даже с учетом дефрагментации ... Под архивированием я имел в виду удаление из БД данных за старые периоды, которые штатно можно удалять. А если они нужны для статистики, то смещать их в другую БД, по которой строить OLAP отчетность, а в рабочей БД данные чистить. Но если у вас 4 миллиарда записей за год заполняются, причем не мусором, то такой вариант вам не подойдет.
__________________
С уважением, glibs® |
|
23.12.2010, 16:13 | #162 |
Роман Долгополов (RDOL)
|
Как тут уже правильно заметили дело скорее всего в алгоритмах постоянно генерящих данные, которые живут недолго и снова и снова пересчитываются (какой нито самодельный модуль или сводное планирование). Если это реально так, то надо сделать ручное заполнение RecId из отдельного нумератора (сделать его на классе SystemSequence) для "полувременных" таблиц
SystemSequence позволяет создавать свои нумераторы на основе того же механизма что используется для RecId и TransId Пример могу дать, но попозже Последний раз редактировалось db; 23.12.2010 в 16:16. |
|
23.12.2010, 16:33 | #163 |
Участник
|
И все таки он существует. Да, бизнес генерит много RecId.
На данный момент за месяц счетчик RecId увеличивается на 250 000 000 в месяц. Из них примерно 160 000 000 - существующие записи, остальное - пустоты в RecId. Для комфортного существования системы в течение 14 месяцев без экстренной дефрагментации на грани, скорость потребления RecId быть меньше чем 4 200 000 000 / 14 = 300 000 000 RecId в месяц, что в условиях растущего количества отгрузок может быть достигнуто достаточно быстро, уже в следующем году, а дальше - больше. Взял 14 месяцев потому что архивирование базы предполагает закрытие года в старой (архивной) базе, это с запасом. То есть проблемы есть, не обманываю я вас. Проблемы с производительностью тоже есть, но в следующем году их планируется решить переходом на новое оборудование и новый оракл. Понятно, что тройка с ее узким местом в inventSum`е помрет и на самом производительном железе. Продление жизни бизнеса на аксцапте 3.0 описанным выше способом рассматривается только как временная мера до перехода на САП. Поэтому, коллеги, помогите чем можите. Хотелось бы услышать ваше мнение о реализации потабличного RecId с помощью дефрагментации. |
|
23.12.2010, 16:52 | #164 |
Участник
|
Цитата:
Пока только 2.5 заполняются, но да, не мусором. Через год по прогнозам вполне вероятно и 4. От этого немусора за старые периоды избавляемся, но не чаще раза в год. |
|
23.12.2010, 17:05 | #165 |
Участник
|
Цитата:
Цитата:
Хотелось бы примерчик. Буду очень-очень благодарен! |
|
23.12.2010, 17:22 | #166 |
Member
|
Скорость, с которой вы заполняете БД, впечатляет. С учетом того, что вы даже склад не закрываете (а то бы у вас InventSettlement был бы в числе больших таблиц). То, что у вас проводки ГК идут наравне с проводками по номенклатуре заставляет серьезно заподозрить недостатки в дизайне решения и/или настройках. Но здесь развивать эту тему с учетом ваших планов не целесообразно.
Я помню идею заталкивать отдельные таблицы в виртуальные компании. Я над ней не думал из-за того, что это путь в тупик. Но если вы скоро спрыгнете на САП, то стоит и ее рассмотреть (ломать — так ломать). Но это если ваш функционал может адекватно работать с виртуальными компаниями.
__________________
С уважением, glibs® |
|
23.12.2010, 17:55 | #167 |
Участник
|
Цитата:
Цитата:
Сообщение от glibs
Я помню идею заталкивать отдельные таблицы в виртуальные компании. Я над ней не думал из-за того, что это путь в тупик. Но если вы скоро спрыгнете на САП, то стоит и ее рассмотреть (ломать — так ломать). Но это если ваш функционал может адекватно работать с виртуальными компаниями.
|
|
23.12.2010, 19:38 | #168 |
Роман Долгополов (RDOL)
|
Обещанный пример "самодельных" RecId для 3.0
В вложении проект с парой классов и джобом джоб также повторю здесь X++: static void recIdExtraTest(Args _args) { mSequence_RecIdExtra seq = new mSequence_RecIdExtra(); RecIdExtraTest recIdExtraTest; int i; ; // эта строка запрещает для таблицы раздачу стандартных RecId // должна быть выполнена до начала пользования новым нумератором // например можно поместить в appl.startupPost() new SystemSequence().suspendRecIds(tablenum(RecIdExtraTest)); for (i = 1; i <= 1000; i++) { // Раздача самодельных RecId recIdExtraTest.(fieldnum(Common, RecId)) = seq.value(); recIdExtraTest.insert(); } } Присвоение RecId только вручную. Возможности глобально сказать что для таких то таблиц брать RecId из нового нумератора нельзя (даже перекрыв insert() могут остаться вызовы doInsert() и вставка через RecordInsertList). Родной режим потабличного RecId в трешке хоть и есть, но неработоспособен (поищите на форуме) Если захочется еще нумераторов, то дублируете mSequence_RecIdExtra, называете как хочется и используете. Предупреждение - все эти извращения на свой страх и риск. Прежде чем использовать на промышленных инсталляциях тестировать и еще раз тестировать. Все это работает и проверено годами, но осторожность не помешает В вашем случает наверняка имеет смысл сделать это для SalesParm*/PurchParm* таблиц |
|
|
За это сообщение автора поблагодарили: DPO (1). |
23.12.2010, 23:04 | #169 |
Member
|
Цитата:
Сообщение от DPO
...
чем плохо такое соотношение записей в этих таблицах. ...
__________________
С уважением, glibs® |
|
24.12.2010, 08:47 | #170 |
Модератор
|
DPO, простите, все же можете показать Ваши top 20 таблиц по количеству записей (из праздного любопытства пока спрашиваю)
Цитата:
Хотелось бы услышать ваше мнение о реализации потабличного RecId с помощью дефрагментации
__________________
-ТСЯ или -ТЬСЯ ? |
|
27.12.2010, 10:44 | #171 |
Модератор
|
Я на выходных еще немного подумал и вот что получается
- Вам придется реорганизовывать ("укладывать параллельно") все таблицы, потому что иначе нельзя (ну, небезопасно по крайней мере) сдвигать "назад" счетчик в SystemSequences, чтобы потом не нарваться на неуникальность сгенерированного RecId - Это означает что придется где-то прописать все связи по RecId - Алгоритм ацки усложнится по сравнению со стандартным, который заточен на то, что значения RecId в пределах компании все же уникальны Т.е. в общем случае решение довольно сложное и не очень живучее получается. С другой стороны, если у Вас только небольшая часть функционала используется, то можно попробовать
__________________
-ТСЯ или -ТЬСЯ ? |
|
05.10.2017, 10:29 | #172 |
Участник
|
Коллеги, нужны ваши советы
При анализе результатов запроса
Цитата:
У нас самый большой прирост в компании dat, это нормальная картина в трешке? dat SEQNO -780 699 868 У кого есть опыт достижения нуля по RecID, поделитесь. Наша база 1, 292 ГБ и проводить операции по Проверке кодов записей затратно по времени, бизнес работает 24 на 7. Есть ли вариант подцепить свежую БД с обнуленным RecID, ну естественно перезалив справочники, последние проводки? Или это архи сложная задача "залить документы и проводки за месяц" из старой базы в новую?
__________________
Axapta 3.0 SP6 |
|
05.10.2017, 12:40 | #173 |
Участник
|
Лучше договориться с пользователями и залить только справочники и исходные остатки и стартовать в новой базе.
|
|
|
За это сообщение автора поблагодарили: Kasper (1). |
05.10.2017, 12:57 | #174 |
Участник
|
Еще вопрос
По моему, после проведения операций Проверка кодов записей, запрос к systemsequence уже не покажет реальной картины?
__________________
Axapta 3.0 SP6 |
|
05.10.2017, 12:59 | #175 |
Участник
|
7 лет...
Я это делал. И на Ax 3 и на Concorde XAL. Результат -- успешно. Я делал средствами БД (MS SQL и Oracle на Concorde) Это именно дефрагментация. Поэтому если всего в БД записей под 2^32 это поможет ненадолго. Рекомендую рассматривать мой вариант в последнюю очередь. Потому что за 10 лет коллеги могли выработать и иные, более простые решения этой проблемы. Предыдущее сообщение Logger тому пример На этом форуме я писал под ником Yaroslav Batozskiy,потом потерял пароль и завёл себя как Kasper Последний раз редактировалось Kasper; 05.10.2017 в 13:05. |
|