AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2006, 05:06   #1  
Blog bot is offline
Blog bot
Участник
 
25,617 / 848 (80) +++++++
Регистрация: 28.10.2006
aEremenko: Дефрагментация RecID
Источник: http://blogs.msdn.com/aeremenk/archi...6/1365941.aspx
==============



RecID является уникальным идентификатором в Dynamics AX (DAX), используемым для ссылок. Практически каждая пользовательская таблица имеет поле RecID по умолчанию. Системные таблицы не содержат данное поле. В DAX 3.0 RecID генерируется в рамках компании. Существует также возможность генерации RecID в разрезе таблиц, но такая опция имеет ряд проблем и не поддерживается.

Дыры в нумерации RecID могут возникнуть, например, вследствие импорта данных, удаления и последующего импорта. Таким образом, при первом импорте был выделен пул номеров для записей, при удалении записей этот пул не восстанавливается, нумерация для последующего импорта продолжит ряд с последнего значения выделенного ранее RecID. Образовалась дыра в нумерации, когда записей нет, а номера задействованы. Проблема в том, что количество номеров конечно.



Ситуация в DAX 3.0

Максимальное число RecID в одной компании равно 2^32-1 (около 4 миллиардов). Число RecID базируется на типе integer/int (32-бит).

Дефрагментация RecID состоит из 2-х фаз:

· Очистка неиспользуемых записей для прошлых / закрытых периодов

· Сжатие, уменьшение дыр в нумерации RecID



Удаление неиспользуемых данных для прошлых / закрытых периодов

Для удаления неиспользуемых данных можно использовать стандартные процедуры очистки. Они существуют практически для каждого модуля, например, Расчеты с клиентами\ Периодические функции\ Очистка\ Очистка истории обработки заказов.

Данная тема очень хорошо описана у Сергея Мазуркина



Уменьшение дыр в нумерации RecID

Результат может быть достигнут двумя путями:

1. Стандартный путь с использованием всех таблиц. Данный путь достаточно затратен по времени. Процедура может быть запущена из Администрирование\ Периодические операции\ SQL Администрирование\ Проверка кодов записей.

2. Обновление пула RecID вручную подразумевает использование прилагаемых сценариев (скриптов) SQL для идентификации больших дыр в нумерации. Сценарии выполняет следующие операции:

· Создание таблицы со всеми значениями RecID для всех таблиц;

· Просмотр созданной таблицы на наличие дыр в нумерации;

· Запись найденных интервалов дыр в другую таблицу.



Рекомендуется запускать сценарии в тестовом окружении. Прилагаемые сценарии и описываемая процедура ручного обновления RecID не являются официально поддерживаемыми процедурами компании - вендора.

После нахождения интервалов дыр, необходимо обновить значение следующего выделяемого номера RecID, установив его в начало найденного большого интервала разрыва в нумерации (дыры). Обновить значение в системной таблице, содержащей следующее значение RecID можно запросом вида:



UPDATE SYSTEMSEQUENCES

SET NEXTVAL = ######

WHERE DATAAREAID = 'dat'

AND NAME = 'SEQNO'



Где ###### - следующий номер для RecID.





Кроме того, можно использовать системный класс \System Documentation\Classes\systemSequence для управления RecID, но делать это без достаточно серьезного тестирования не рекомендуется.



Ситуация в DAX 4.0

Версия 4.0 содержит 64-битный пул RecID, RecID базируется на новом типе int64. Также, в DAX 4.0, можно сегментировать RecID в разрезе таблиц. Этого более чем достаточно для очень крупной компании лет на 100. Более того, планируется, что в 4.1. появится процедура архивации данных, позволяющая управлять данными за прошлые года и очищать их при необходимости.

Следовательно, в 4.0 проблема исчезла. Очень рекомендуется рассмотреть вопрос о переходе на DAX 4.0, если в DAX 3.0 много записей и есть проблемы с нумерацией RecID.

Если миграция невозможна в короткие сроки, можно использовать сценарии описанные выше.

Источник: http://blogs.msdn.com/aeremenk/archi...6/1365941.aspx
Старый 06.03.2007, 21:15   #2  
СибирскийКлещ is offline
СибирскийКлещ
Участник
 
26 / 11 (1) +
Регистрация: 24.11.2005
За статью спасибо.
А вот ...
Цитата:
Сообщение от Blog bot Посмотреть сообщение
RecID базируется на новом типе int64.
Не смешите.Новый он только для системы Dynamix Ax. Все остальные (компиляторы, СУБД, программы конкурентов) давно его используют.

P.S. Интересно, а был ли когда-нибудь дан ответ на вопрос "Каков сакральный смысл размазывания RecId по компании, порождающий все эти проблемы ?"

Последний раз редактировалось СибирскийКлещ; 06.03.2007 в 21:41.
Старый 06.03.2007, 22:25   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от СибирскийКлещ Посмотреть сообщение
а был ли когда-нибудь дан ответ на вопрос
Да, был. Ищите на форуме.
В двух словах - recid появился очень давно, еще когда каждая компания создавала собственную СУБД, а промышленных стандартов не было.
Сейчас recid используется по соображениям совместимости.
__________________
полезное на axForum, github, vk, coub.
Теги
ax3.0, recid, дефрагментирование recid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
Как сформировать RecId Arahnid DAX: Программирование 18 14.07.2008 15:02
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56
aEremenko: Ресурс заблокирован, ждите... Blog bot DAX Blogs 0 28.10.2006 16:01

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:25.