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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2006, 13:02   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
2 Batch сервера - ошибка
Ax3.0SP2 + MS SQL2kSP3.
На одной машине (сервер), под одним логин, работают 2 пакетных сервера. Клиенты, в которых запущены пакетные группы, - Fat, пользватели (логины аксапты) разные. Вот работают себе эти 2 пакетника, обрабатывают 2-е разные пакетные группы, все хорошо и вдруг один оставливается с сообщением : "Невозможно выбрать запись в 'Пакетные проводки ' ('Batch') Приоритет: 0, .Тупиковая ситуация. Один или несколько пользователей одновременно блокировали всю таблицу или ее часть.". И так переодически.
никто не сталкивался? что можно предпринять?
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 17.11.2006 в 13:04. Причина: граматика :)
Старый 17.11.2006, 14:17   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Сталкивался. Посмотрел код стало понятно, что блокировка происходит, когда производится update статуса в таблице Batch. Сделал следующее: уменьшил частоту сканирования таблицы Batch (по умолчанию было 30 сек, поставил 600 (10 мин)). Ошибка стала появляться значтельно реже (после изменения появилась всего один раз). Еще убрал все что касается статуса Ошибка т.к. не нашел что в нем полезного (если пакетный класс сваливается по exception, то статус пакета становится Error и пакет больше не запускается пока этот статус не сменишь руками).
Старый 17.11.2006, 14:28   #3  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
ага. я в Батче тоже полазил и по максимуму сузил время действия транзакции (разделил на несколько где надо) - не помогло, а вот на счет сваливания со статусом ошибка и остановки это надо поковырять.
__________________
--- SHiSHok
Старый 17.11.2006, 14:33   #4  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Транзакции я тоже менял, не помогло. Потом подумал - зачем раз в тридцать секунд искать в таблице, не нужно ли что-нибудь запустить, если у нас минимальный интервал запуска пакетов - 20 минут. 20 ставить не стал, поставил 10. Наверное не очень красивое решение, но зато помогает
Старый 17.11.2006, 16:24   #5  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
У нас задачи пакетной обработки разделены по пакетным группам. Каждый пакетный сервер обрабатывает задания только своей группы. Может поэтому у нас блокировок практически нет?
Старый 17.11.2006, 16:51   #6  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Анннналогично. Пакетные серваки исполняют 2 разные пакетные группы, да и пакетные группы по своим функциям совершенно из разных опер (в общем-то с пересечением функционала проблем не возникало). Еще такой ньюансик: вылетает постоянно пакетник у которого название Пакетной Группы "ниже" (при сортировке по возрастанию) и так вышло RecId больше. Как то странно уж очень.
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 17.11.2006 в 16:55.
Старый 17.11.2006, 17:04   #7  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Нашел правки в классах BatchRun и RunBaseBatch.
В runJob первого есть код проверки
if (batch.JournalId)
runBaseBatch.batchRecId(batchId);
//после runBaseBatch.run();
Во втором:
возврат RecId выполняемой задачи
Старый 20.11.2006, 13:41   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Транзакции я тоже менял, не помогло. Потом подумал - зачем раз в тридцать секунд искать в таблице, не нужно ли что-нибудь запустить, если у нас минимальный интервал запуска пакетов - 20 минут
Цитата:
Наверное не очень красивое решение
Пожалуй. Если пакетов много, система просто не будет успевать обрабатывать их, ну и время реакции на постановку пакета в очередь не фонтан

Можно сделать чуть тоньше - увеличить интервал очистки (смены статусов у пакетов, зависших в статусе "Выполнение", BatchRun.cleanUpExecuting()), лочится в основном там и на BatchRun.search()

Плюс мелкий тюнинг индексов на Batch

На выходные в таком режиме крутилась молотилка из шести пакетных серверов на шесть групп, периодичность у пакетов - минута (своего рода "песочница" - пакеты ничего полезного не делают)
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.11.2006, 17:34   #9  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от KiselevSA Посмотреть сообщение
Нашел правки в классах BatchRun и RunBaseBatch.
В runJob первого есть код проверки
if (batch.JournalId)
runBaseBatch.batchRecId(batchId);
//после runBaseBatch.run();
Во втором:
возврат RecId выполняемой задачи
у нас пакетные журналы не используются.
__________________
--- SHiSHok
Старый 23.11.2006, 18:00   #10  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Цитата:
Сообщение от Vadik Посмотреть сообщение
Пожалуй. Если пакетов много, система просто не будет успевать обрабатывать их, ну и время реакции на постановку пакета в очередь не фонтан

Можно сделать чуть тоньше - увеличить интервал очистки (смены статусов у пакетов, зависших в статусе "Выполнение", BatchRun.cleanUpExecuting()), лочится в основном там и на BatchRun.search()

Плюс мелкий тюнинг индексов на Batch
похоже индекс под Search делали, да зачемто только createdDate,Time туда влепили. Но я "batch = this.search();" убрал из транзакции. А вот СleanUpExecuting нехорошо может залочить своим while select forupdate - убрал транзакцию внутрь условия. Теперь понаблюдаем.
__________________
--- SHiSHok
Старый 30.11.2006, 14:30   #11  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
отчет: почти неделя работы 2-х пакетных серверов без единой ошибки. можно с уверенностью (95% ) сказать что блокировались записи в BatchRun::cleanUpExecuting
Думаю не лишним будет поправить тем кто использует больше одного батч сервера:

X++:
server static public void cleanUpExecuting(boolean checkSession = false)
{
    Batch _batch;
    Batch _batch4update; // SHiSHok


    while select _batch
        index hint StatusIdx 
        where _batch.status      == BatchStatus::Executing  &&
              _batch.sessionIdx  >  0
    {
        if (! _batch.isSessionActive(checkSession))
        {
// SHiSHok , 20061123 stability turnung-->
            ttsbegin;
            _batch4update=batch::findRecId(_batch.RecId,true);
            _batch4update.status = BatchStatus::Waiting;
            _batch4update.update();
            ttscommit;
// SHiSHok <--
        }
    }
}
__________________
--- SHiSHok
За это сообщение автора поблагодарили: AlGol (2), MironovI (2), Antant (1).
Теги
ax3.0, batch

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Batch processing Blog bot DAX Blogs 0 29.01.2009 17:05
axaptabuilder: How to setup Axapta batch server running as user defined windows service Blog bot DAX Blogs 0 12.04.2007 16:10
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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