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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2011, 15:03   #1  
denni is offline
denni
Участник
 
5 / 11 (1) +
Регистрация: 06.09.2011
Адрес: Ekb
Неявные транзакции
Всем привет! Надеюсь на помощь коллективного разума.
Проблема в следующем: Пользователи работают на удаленных рабочих столах, при этом у одного - двух различных аккуантов регулярно происходят сбои (один, два раза в месяц), а именно - постоянно "держится" транзакция на SQL, при этом они спокойно перемещаются по записям, закрывают формы, в общем живут обычной жизнью. Если посмотреть на остальных юзеров, то видно, что они получают доступ только к тем данным, которые не "читаются" сессией, вызвавшей коллапс (что логично при транзакции), откуда, естественно возникают жуткие "тормоза". После того как "зависшую" сессию завершили принудительно - теряются данные за последние 10 - 20 мин работы...

Что было предпринято: Просмотрели весь код на наличие непарных ttsbegin / ttscommit (хотя даже в таком случае штатный механизм должен ругаться), создали несколько новых аккуантов, что не помгло - один из новых так же "повесился", сбрасывали кеш, переиндексировали приложение... В общем варианты закончились...Что примечательно, другие пользователи при аналогичных условиях (права, доступ к функционалу, сеть, машины), работают стабильно...
Подскажите, что еще можно сделать или куда копать. Заранее благодарен...
ЗЫ: Ax 4.0
kernel version 4.0.2501.116
application version 4.0.2501.121
SQL 2008
Старый 12.09.2011, 15:14   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Просмотрели весь код на наличие непарных ttsbegin / ttscommit
Скорее всего в них все дело и есть. Причины обычно такие:
1. Открывается форма из кода внутри начатой транзакции. После этого Аксапте обычно сносит крышу могут быть описанные вами эффекты. Я раньше боролся на проекте с такими багами, ставил ловушки. Например, можно написать в глобале метод, который проверяет если транзакция открыта, то пишет в отдельном соединении к БД в специальный лог стек вызова. И поставить вызов этого метода в \Classes\SysSetupFormRun\init и во все методы класса BOX. Тогда гарантировано вы поймаете в логе все стеки вызовов которые приводят к таким проблемам и сможете вылечить.

2. Просто в коде есть непарные ttsbegin / ttscommit - как ловить - затрудняюсь описать. Для начала на основных табличках проверить нет ли return или break или continue внутри ttsbegin / ttscommit
За это сообщение автора поблагодарили: denni (1).
Старый 12.09.2011, 15:15   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вешать свой код с логгированием и записью стека на Application.ttsNotify*() и отслеживать по нему, что происходит
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (3), denni (1).
Старый 12.09.2011, 15:37   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от AndyD Посмотреть сообщение
Вешать свой код с логгированием и записью стека на Application.ttsNotify*() и отслеживать по нему, что происходит
Да ! Точно!

Еще при логировании удобно использовать вызов
appl.curTransactionId(true)

Т.е. можно логировать транзакции оп их номерам и легко находить те из них которые не завершались. Ну и плюс эти же номера попадают в CreatedTransactionId / ModifiedTransactionId
Старый 12.09.2011, 15:44   #5  
denni is offline
denni
Участник
 
5 / 11 (1) +
Регистрация: 06.09.2011
Адрес: Ekb
Спасибо участникам. В принципе, думал о логгировании, смущало только одно - был уверен на все 100%, что Ах не даст открыть форму во время транзакции (будет постоянно ругаться)... Проведу "тотальную" проверку кода + поставлю лог. О результатах отпишусь
Старый 12.09.2011, 15:46   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Может это и не форма виновата.
Старый 12.09.2011, 15:53   #7  
denni is offline
denni
Участник
 
5 / 11 (1) +
Регистрация: 06.09.2011
Адрес: Ekb
Имел ввиду, что если транзакция неокончена (по различным причинам) система не даст открыть другую форму, закрыть открытую...
Старый 12.09.2011, 16:17   #8  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от denni Посмотреть сообщение
Имел ввиду, что если транзакция неокончена (по различным причинам) система не даст открыть другую форму, закрыть открытую...
Насколько я помню форму открыть дает, но при этом открытую транзакцию откатывает, поскольку следом ругается на ttscommit. По крайне мере я так понял.
Например, см. Ошибка при вызове диалога, но это было давно, возможно что-то изменилось
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Временные таблицы и транзакции Lemming DAX: Программирование 11 13.10.2009 12:16
Откат транзакции за вчерашний день??? Возможно в SQL2000??? director DAX: Администрирование 5 16.12.2005 11:26
Axapta ComConnector и распределенные транзакции pASkuda DAX: Прочие вопросы 0 12.04.2005 19:28
Транзакции: баг или фича ? Yury DAX: Программирование 4 21.02.2003 17:54
транзакции andreynikolai DAX: Программирование 2 20.06.2002 17:51

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

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

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