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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.04.2019, 23:44   #1  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Не обновляется статус BatchJob после завершения
Коллеги, добрый день.

В АХ2009 последние несколько дней наблюдаю странную ситуацию - в пакетных заданиях статус Batch переходит в "Завершено", а статус "BatchJob" зависает на неопределнное время в "Выполнение".

Особенности ситуации:
1. В БД при этом нет блокировок
2. Ситуация касается не отдельных пакетных заданий, а всех
3. Ситуация возникает время от времени - день работает нормально -> зависание -> далее снова какое-то время работает нормально и так далее. Закономерности четкой нет.
4. Если обновить статус пакетного задания точечно в "Отмена", а затем в "Ожидание", то он снова нормально стартует и продолжает нормально работать неопределенное время
5. Ситуация может разрешиться сама собой - т.е. пакеты снова массово переходят в статус "Ожидание" и далее по кругу.
6. На BatchJob в свойствах таблицы убрал кэширование

Сталкивался ли кто-нибудь с подобным?
Если да, то как решили данную ситуацию?
На что следует обратить внимание при решении ситуации, "куда смотреть"?

Спасибо.
__________________
С уважением, Александр.
Старый 22.04.2019, 06:44   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,932 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Предлагаю пересоздать индексы.
А дальше внимательно курить методы класса batchrun, переводящие статусы.
Старый 22.04.2019, 06:51   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,932 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Повспоминать, что могло в бд поменяться при смене сервера.
Версия винды. Какие то обновления sql?
За это сообщение автора поблагодарили: samolalex (4).
Старый 22.04.2019, 07:39   #4  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Статус завершается вроде бы отдельным обработчиком. Может у вас просто не хватает потоков(они все заняты чем-то).
Можно попробовать увеличить "Максимальное число потоков в пакетном задании" в конфигурации сервера
За это сообщение автора поблагодарили: samolalex (4).
Старый 22.04.2019, 09:51   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Александр, стоит посмотреть нет ли ожидания работы SP_GETAPPLOCK (у нас, точнее теперь у вас, он логируется).
Там же где пакетные задачи есть запрос об ожиданиях разрешения на запуск. Большие ли там ожидания для процесса, в имени которого есть FinishedJobs?
За это сообщение автора поблагодарили: samolalex (4).
Старый 22.04.2019, 10:46   #6  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Алексей, спасибо. Проверил по логу интервалы времени возникновения зависаний.
Ожиданий работы SP_GETAPPLOCK в это время нет.
__________________
С уважением, Александр.
Старый 22.04.2019, 21:15   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Тогда, возможно, стоит помониторить как работает метод класса
X++:
BatchRun::serverProcessFinishedJobs
То есть, записывать в какой-либо лог в отдельной транзакции момент, когда выполнение проходит дальше, чем проверка:
Цитата:
if(!shouldProcess)
return;
Соответственно, если проходим дальше примерно раз в минуту-другую, то проблемы где-то далее, а вот если не проходим, то попробовать логировать места, в которых идет работа в начале метода с batchGlobal в тех местах, в которых в итоге не устанавливается shouldProcess = true, то есть в двух catch и сделать ветку else для проверки LastProcFinishedJobs с записью в этот лог.
Возможно, стоит в лог писать данные о значении thisDate и batchGlobal.LastProcFinishedJobs.
Поятно, что логирование работы с bacthGlobal имеет смысл делать, если будет понятно, что дело в срабатывании if(!shouldProcess).
PS: в любом случае, метод вызывается часто, поэтому записей в логе будет много, нужно будет чистить его время от времени.

Последний раз редактировалось Raven Melancholic; 22.04.2019 в 21:19. Причина: Орфографические ошибки
За это сообщение автора поблагодарили: Logger (3).
Старый 23.04.2019, 08:23   #8  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Может у вас появились пакетные задания с BatchConstraint? Попробуйте удалить записи из этой таблицы в момент закипания статуса пакетов.
Старый 04.06.2019, 14:49   #9  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
297 / 866 (29) +++++++
Регистрация: 23.10.2012
Добрый день.
Была аналогичная проблема. Поскольку BatchGlobal обновляется в отдельной транзакции - он всегда содержит данные, "якобы" метод уже обновил всю необходимую информацию. Хотя на самом деле выполнение кода "оборвалось" на какой-либо вставке записей в таблицы истории.
За это сообщение автора поблагодарили: gl00mie (3).
Старый 04.06.2019, 16:43   #10  
Pokersky09 is offline
Pokersky09
Участник
 
43 / 60 (3) ++++
Регистрация: 15.11.2012
Адрес: Turkey
У меня бывало, что:
1) Если при работе пакетного задания запустить пересборку цила, то пакетник зависал (навсегда). Связано это с тем что сервисы отключаются при этом, и уже нормально не подхватывается пакет после такого.
Спасало только полная очистка всех строк пакетника (таблица вроде Batch), либо обновление статуса вручную (джобом).

2) Бывает что когда одновременно много потоков (один или несколько пакетников работает), и в каждом потоке есть большой инфолог (который пакуется в batch поле таблицы), то возникали блокировки на уровне SQL, так как по факту могут быть большие объемы данных, и SQL физически не успевал все делать. Но этот способ легко ловить обычным sp_whoisactive на sql.

P.s. Возможно у вас что-то иное, делюсь своими кейсами.
За это сообщение автора поблагодарили: Logger (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Статус строки "Отменено" CHESER85 DAX: Программирование 6 12.01.2017 15:04
Как скорректировать себестоимость в складских проводках, чтобы она была похожа на себестоимость после закрытия склада Ace of Database DAX: Программирование 9 26.05.2014 14:41
Амортизация после кап.ремонта по НУ sns DAX: Функционал 15 05.12.2008 02:35
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
грид обновляется Natasha DAX: Программирование 1 15.02.2003 12:53

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

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

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