|
28.01.2011, 09:55 | #1 |
Участник
|
Еще раз о переименовании номенклатуры (ItemID).
Доброго времени суток!
Поставлена задача массового переименования первичного ключа в номенклатурном справочнике, очень много неверных кодов. Кто-то реализовывал подобную задачу? Поделитесь опытом. Я снял трассировку переименования ItemID с помощью профайлера сиквела. Длительность процесса переименования колебалась в пределах 1 час 20 минут - 2 часа. Снял трассировку переименования вновь созданной номенклатуры, те же временные показатели. Все трассировки снимал в монопольном режиме на тестовой системе, т.е. в базе работал только один пользователь. В итоге: обрабатывается 164 запроса по 141 таблице. Проблема в том, что номенклатурный справочник привязан к виртуальной компании, а в ней объединено 7 компаний, поэтому апдейты по большинству таблиц обрабатываются по 7 раз (в каждой компании). Итого 914 запросов, конечно, из них есть 49 самописных таблиц . При запуске в рабочей системе процесс переименования блокирует пользователей. Может имеет смысл написать идентичный запрос, тупо скопировав все запросы из профайлера, и запустив его на сиквеле? Фокус в том, что все запросы сверху объединены общей транзакцией для отката, и даже если в данный момент процесс переименования не апдейтит таблицу в которую вносят данные пользователи, но она в общем списке таблиц на переименование, пользователи блокируются и ждут. Как бы блокировать пользователей только в пределах одной – трех таблиц?
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 10:05 | #2 |
Участник
|
если компания не работает в режиме 24х7, то запустите когда пользователей нет или их количество минимально
|
|
28.01.2011, 10:10 | #3 |
Участник
|
Именно так и работаем, еще и ругаются на перезагрузки АОСа.
Им нужна Аксапта 25 часов в сутки
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 10:12 | #4 |
Участник
|
а 1,5 - 2 часа на 1 номенклатуру?
|
|
28.01.2011, 10:16 | #5 |
Участник
|
Да. Причем по вновь созданной приближается к 2 часам
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 10:40 | #6 |
Участник
|
Если такой напряженный график, то лучше всего делать переименование с помощью прямых SQL запросов:
1. Создаете таблицу переименования (старый код, новый код) 2. На всякий случай желательно покопаться в функционале, может какие-нибудь таблички не попали в штатное изменение первичного ключа (например может не попасть прайс, правда я не проверял) 3. Создаете запросы на основании лога профайлера по нужным компаниям и п.2 4. Выгоняем пользователей 5. Прогоняем сформированные запросы (время выполнения ориентировочно меньше 2 часов) 6. Разглядываем последствия 7. Продолжаем работу в АХ Если время простоя 2 часа (или какое покажет тест) неприемлемо, то можно вместо п. 4: 4.1 Создать (скопировать) новую номенклатуру с правильными кодами 4.2 Заблокировать вновь созданную и предназначенную к переименованию Далее прогоняем последовательно запросы, каждый в своей транзакции. Это может быть дольше, т.к. их могут заблокировать пользователи и нужно будет постоянно отслеживать процесс и "отстреливать" пользователей мешающих переименованию. |
|
28.01.2011, 11:02 | #7 |
Участник
|
to pitersky
Да вариант, спасибо. Подскажите как поставить эту блокировку. Мое время не важно, главное сократить время простоя пользователей.
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 11:21 | #8 |
Участник
|
|
|
28.01.2011, 10:21 | #9 |
Участник
|
а если создать индексы по ItemId(и другим обновляемым полям) временно для обновления, может получится быстрее?
|
|
28.01.2011, 10:28 | #10 |
Участник
|
Согласен. НО сам процесс создания индексов, тоже подвешивает пользователей. ВИЛКА Можно, конечно, разок помучить пользователей и оставить индексы навсегда, но тогда все инсерты будут подтормаживать.
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 10:44 | #11 |
Участник
|
Торможение инсертов будет копеечным, т.к. АХ подавляющее кол-во операций вставки/удаления делает по одной записи. Зато можно выиграть а дальнейшем на операциях выборки, а можно и не выиграть Основной минус дополнительных индексов в АХ - рост БД.
|
|
28.01.2011, 10:47 | #12 |
Участник
|
в случае существенного торможения, индексы легко выключаются в АОТ
|
|
28.01.2011, 11:08 | #13 |
Участник
|
Цитата:
197 Гиг, но это решаемо другими способами.
__________________
Axapta 3.0 SP6 |
|
28.01.2011, 10:34 | #14 |
северный Будда
|
Я бы пошёл с таким раскладом по времени к постановщику задачи и задал ему вопрос - стоит ли переименование первичного ключа таких затрат.
Вообще - если переименование нужно только для упрощения процесса поиска, то я бы поступил по другому - занёс бы правильные коды в NameAlias джобом и добавил это поле в группу AutoLookup. Тогда пользователь сможет быстро найти номенклатуру и по старому, и по новому коду. А уж само переименование (если действительно без него никак) делать не торопясь и в пономенклатурной транзакции.
__________________
С уважением, Вячеслав |
|
28.01.2011, 11:24 | #15 |
Участник
|
Цитата:
Все так. Я и планировал по 1 номенклатуре в день. Или все скопом в праздничный день. Но пока, требования в реальном времени.
__________________
Axapta 3.0 SP6 |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|