AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

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

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

2. Просто в коде есть непарные ttsbegin / ttscommit - как ловить - затрудняюсь описать. Для начала на основных табличках проверить нет ли return или break или continue внутри ttsbegin / ttscommit
This post has been rated by: denni (1).
Old 12.09.2011, 15:15   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Join Date: 20.08.2005
Вешать свой код с логгированием и записью стека на Application.ttsNotify*() и отслеживать по нему, что происходит
__________________
Axapta v.3.0 sp5 kr2
This post has been rated by: Logger (3), denni (1).
Old 12.09.2011, 15:37   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by AndyD View Post
Вешать свой код с логгированием и записью стека на Application.ttsNotify*() и отслеживать по нему, что происходит
Да ! Точно!

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

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Временные таблицы и транзакции 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:34.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.