08.08.2004, 12:07 | #1 |
Участник
|
Как выполнять дефрагментирование RecID
Вопрос возник после реплики Yaroslav Batozskiy
http://www.axforum.info/forums/showt...0348#post40348 Цитата:
Например при дефрагментировании RecId я обнаружил, что есть поля со ссылками по Recid, тип которых не наследуется от RecId
Именно из-за того, что есть поля, которые содержат ссылку на RecID, но не унаследованы от RecIdRef. А кто как делает дефрагментацию RecID? И надо ли делать эту дефрагментацию? Yaroslav Batozskiy, очень хотелось бы услышать ваше мнение. |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
08.08.2004, 12:57 | #2 |
Модератор
|
Re: Как выполнять дефрагментирование RecID
Цитата:
Изначально опубликовано mazzy
А кто как делает дефрагментацию RecID? |
|
08.08.2004, 13:31 | #3 |
Участник
|
В двух словах.
Размер recID - unsigned double word. Таким образом, максимальный номер recId = 2^32-1 (около 4 млрд) записей в одной компании. В больших внедрениях это ограничение уже значимо. Записи добавляются и удаляются. В Аксапте есть множество мест, где записи на некоторое время создаются, а затем могут удаляться. Например, журналы, заказы и т.п. Таким образом, максимальный номер может быть достигнут быстро, хотя записей в базе существенно меньше. Тут и помогла бы дефрагментация. |
|
08.08.2004, 13:43 | #4 |
Модератор
|
а что, кто-то уже с этим столкнулся?
select dataareaid, name, nextval from systemsequences order by nextval desc давайте меряться максимальным значением NextVal у меня 87945778 |
|
08.08.2004, 14:11 | #5 |
Участник
|
а теперь экспортируй компанию и импортируй обратно с удалением предыдущих значений.
|
|
08.08.2004, 14:27 | #6 |
Модератор
|
Если в большой компании есть время развлекаться таким образом, наверное, лучше будет сделать импорт в свежесозданную компанию Аксапты, а старую удалить
|
|
08.08.2004, 14:30 | #7 |
Участник
|
я не про это.
я про то, что: 1. max(NextVal) ни о чем не говорит 2. верхний предел теоретически может быть достигнут достаточно быстро. |
|
08.08.2004, 14:32 | #8 |
Участник
|
Цитата:
Изначально опубликовано Vadik
а что, кто-то уже с этим столкнулся? Да, на течнете пару лет назад висел глас вопиющего сингапурца. он что то там химичал с корпоративным порталом, экспортировал/импортировал описания, путался настроить ...и уперся |
|
09.08.2004, 09:12 | #9 |
Member
|
Re: Как выполнять дефрагментирование RecID
Цитата:
Изначально опубликовано mazzy
... А кто как делает дефрагментацию RecID? ...
__________________
С уважением, glibs® |
|
09.08.2004, 09:14 | #10 |
Участник
|
Интересно
а что происходит при достжении этого предела и какие последствия ?
|
|
09.08.2004, 09:37 | #11 |
Member
|
Писали на Technet. Говорили, что сначала начнут выделяться отрицательные RecID, а потом вроде как будут заполняться дырки. Скорее всего, это были предположения, нежели информация из официальных источников. Было несколько очевидцев того, что при отрицательных RecID не работают некоторые ссылки, т.к. в некоторых запросах в условиях в Select вроде как прописаны ограничения на положительный RecID. В общем, если хотите, можете поискать там. Я данным вопросом очень сильно не увлекался, так что больше вам ничего сказать не смогу.
__________________
С уважением, glibs® |
|
09.08.2004, 10:58 | #12 |
Moderator
|
Цитата:
Говорили, что сначала начнут выделяться отрицательные RecID, а потом вроде как будут заполняться дырки.
Что происходит с ним при достижении 0 я не знаю, но очень сомневаюсь, что дырки будут заполняться. Это связано с тем, что Аксапта либо должна где-то держать список этих дырок (а такого я не наблюдал), либо каждый раз проверять наличие recId в базе, что будет занимать ОЧЕНЬ большое время. |
|
09.08.2004, 11:06 | #13 |
Moderator
|
Цитата:
а что происходит при достжении этого предела и какие последствия ?
В общем, Аксапта работает. Проблемы возникают только в тот момент, когда уже использованный recId повторно вставляется в ту же самую таблицу, куда он был вставлен за предыдущий проход. В этом случае нарушается уникальность индексов на уровне СУБД, о чем Аксапта сообщает в infolog-е. Кроме того, возможны проблемы с таблицами, в которых связь осуществляется по recId. Все вышеописанное - всего лишь результаты эксперимента и я не советую проверять это на рабочей базе. |
|
09.08.2004, 13:52 | #14 |
Модератор
|
Приветствую всех!
Никто не мог бы подсказать, возможно ли на распределенной базе (Все таблицы общие, кроме SequenceNumber и SystemSequence) разделить RecId и часть номерных серий... т.е. что бы каждая база "думала", что она работает только в своем диапазоне, что бы при репликации данные не наслаивались друг на друга... И вообще, кто-нибудь распределенку делал?? Поделитесь опытом плиз-з-з! С Уважением, Георгий. |
|
09.08.2004, 14:03 | #15 |
Участник
|
Цитата:
Изначально опубликовано glibs
Писали на Technet. Говорили, что сначала начнут выделяться отрицательные RecID, а потом вроде как будут заполняться дырки |
|
09.08.2004, 14:06 | #16 |
Участник
|
Цитата:
Изначально опубликовано Андре
В общем, Аксапта работает. Проблемы возникают только в тот момент, когда уже использованный recId повторно вставляется в ту же самую таблицу, куда он был вставлен за предыдущий проход. В этом случае нарушается уникальность индексов на уровне СУБД, о чем Аксапта сообщает в infolog-е. Кроме того, возможны проблемы с таблицами, в которых связь осуществляется по recId. Главное ограничение - повторные recID являются нарушением целостности и работа бизнес-логики и самой Аксапты не гарантируется. Например, у сопоставления крыша поедет. |
|
09.08.2004, 14:26 | #17 |
Модератор
|
Цитата:
Изначально опубликовано mazzy
отрицательные recID - это было очень давно. еще когда тип был signed. |
|
09.08.2004, 14:36 | #18 |
Участник
|
это представление для пользователя.
внутри она работает с беззнаковым типом. http://technet.navision.com/workspac...tribId=1&wso=1 |
|
09.08.2004, 14:46 | #19 |
Модератор
|
Хм.. т.е. When the RecId is negative this will offcause not happen. The correct criteria is that RecIdSettlement should be checked if it is different from zero - это для пользователя так... Что ж, в таком случае - отрицательные RecId - это беззнаковые с номером выше 2^31-1 (2147483647)... Непонятно, правда, что это нам дает...
|
|
09.08.2004, 14:52 | #20 |
Модератор
|
PHP код:
-2147483648 по-моему, очень даже signed SystemSequences, как уже писал Андрей, ведут себя аналогично двоичная арифметика так у кого еще NextVal в отрицательные значения перевалило? |
|