AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 27.12.2006, 05:06   #1  
Blog bot is offline
Blog bot
Участник
 
25,644 / 848 (80) +++++++
Join Date: 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
Old 06.03.2007, 21:15   #2  
СибирскийКлещ is offline
СибирскийКлещ
Участник
 
26 / 11 (1) +
Join Date: 24.11.2005
За статью спасибо.
А вот ...
Quote:
Originally Posted by Blog bot View Post
RecID базируется на новом типе int64.
Не смешите.Новый он только для системы Dynamix Ax. Все остальные (компиляторы, СУБД, программы конкурентов) давно его используют.

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

Last edited by СибирскийКлещ; 06.03.2007 at 21:41.
Old 06.03.2007, 22:25   #3  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by СибирскийКлещ View Post
а был ли когда-нибудь дан ответ на вопрос
Да, был. Ищите на форуме.
В двух словах - recid появился очень давно, еще когда каждая компания создавала собственную СУБД, а промышленных стандартов не было.
Сейчас recid используется по соображениям совместимости.
__________________
полезное на axForum, github, vk, coub.
Tags
ax3.0, recid, дефрагментирование recid

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
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
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 21:28.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.