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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2010, 16:04   #1  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Провожу сейчас исследование на тему дефрагментации, поскольку RecID уже за -1.6 млрд перевалил. Что обнаружил, применимо к Oracle -
строка 103, mainLoop -
X++:
this.executeUpdate('CREATE TABLE AXOLDTONEWRECIDS (OLDRECID NUMERIC(12), NEWRECID NUMERIC(12), CONSTRAINT PK_AXOLDTONEWRECIDS PRIMARY KEY (OLDRECID)) ORGANIZATION INDEX');
убрав слова "ORGANIZATION INDEX" - получил уменьшение времени расчета с 2 СУТОК до 2 ЧАСОВ!
Собственно CONSTRAINT PK_AXOLDTONEWRECIDS ИМХО можно безболезненно убрать!
За это сообщение автора поблагодарили: Logger (5), gl00mie (3).
Старый 20.08.2010, 13:46   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Недавно вместе с одним из пожелавших остаться неизвестным участников "отдефрагментировали" RecId :

Вводная:
- Несколько (порядка 10) компаний, три крупных
- Одна виртуальная компания
- Максимальный RecId 1843756363
- Размер БД около 280Гб (SQL Server 2008)

Проблемы:
- основная, разумеется, размер БД и ограниченное временное окно на выполнение процедуры
- стандартный механизм обладает некоторыми "особенностями":
- при запуске по всем компаниям компаний эффект "сжатия RecId" может снижаться или полностью отсутствовать
- при запуске по одной компании неправильно делается обновление ссылок по RecId на таблицы в виртуальных компаниях и "общие" (SaveDataPerCompany=No) таблицы
- хотелось хранить историю маппинга "старых" и "новых" значений RecId для разбора непредвиденных проблем

Как обходили:
- модифицирован класс SysRecRepair, добавлен небольшой фреймворк для регистрации "проблемных" ссылок (описание "проблемных" ссылок см. выше, определение ссылок делается вручную)
- исключили (средствами фреймворка) из обработки некоторые большие "непостоянные" таблицы (SysDatabaseLog, SysUserLog, xRef)
- переконфигурировали некоторые параметры БД на время обработки (отключение RCS, auto update statistics и пр.)
- настроили partitioning по DataAreaId
- временно удалили некластерные индексы с RecId на таблицах, где их более одного
- сохраняем временную таблицу маппинга "старых" значений RecId на "новые"

Результат:
- Количество обработанных записей по всем компаниям - 2850036022
- Максимальный RecId - 180862996 (сжатие приблизительно в 10 раз, благо были достаточно большие "дырки" в выделенных RecId)
- Вся процедура заняла около 12 часов, из них работа класса SysRecIdRepair около 7 часов.

Ограничения:
- Анализ имеющихся проблемных ссылок по RecId в виртуальные компании не автоматизирован (выполняется вручную)
- Версии для Oracle нет (пока)
- Обработка нескольких виртуальных компаний есть, но не протестирована

Код не выкладывается (по крайней мере пока), воспринимайте данный пост как некий whitepaper плюс "тестовый забег"

P.S. - в "простых" случаях (одна компания) стандартный механизм работает корректно
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: gl00mie (3).
Старый 08.12.2010, 14:17   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Также см. альтернативный подход от Gustav
__________________
-ТСЯ или -ТЬСЯ ?
Теги
ax3.0, faq, recid, дефрагментирование recid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56
Форма InventOnhandItem, Почему RecID у InventSum в этой форме всегда 0? Кирилл DAX: Программирование 2 25.05.2004 18:15

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.