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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.07.2007, 17:33   #1  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
Проблема с кэшированием в Аксапте
Столкнулся с непонятной проблемой, которая, как мне кажется, связана с кэшированием. Суть в том, что при изменении данных (и не только) Аксапта в некоторых случаях (не всегда) использует старые или вообще неизвестно откуда появившиеся данные. Причем в один и тот же момент разные клиенты видят разную информацию. Более конкретно в примерах :

Пример 1:
В таблице есть поле A, которое отображается на форме. И на форме, и через Обозреватель Таблицы видно, что значение поля для одной из строк = false, а при работе одного из методов, который правильно находит эту строку, значение этого поля = true (видно в Debugger-e). Совершенно непонятно откуда берется такое значение.
Проблему удалось решить очистив кэш на сервере и перезагрузив клиента.

Пример 2:
Изменил код в методе одного из классов, сохранил, откомпилировал. Но при работе с моего компа вызывается старый, неизмененный метод (Debugger в него сваливается). При этом на других компах видят мой новый метод. Перезагрузка Аксапты не помогла. Проблему так и не решили.

И куча похожих багов, которые повторяются постоянно...

Вообще непонятно в чем проблема, где искать корни и самое главное как исправить. Так было не всегда - только последнюю неделю. Никаких изменений в настройках связанных с кэшированием не было. Единственное - около месяца назад создали кластер AOS-ов, но недели 3 все работало нормально.

Если у кого есть мысли, очень прошу высказаться - проблема серьезно мешает работать.

Заранее спасибо.

P.S. Ax 3.0 SP2
Старый 19.07.2007, 17:48   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, здесь нового ничего нет, и все работает, как и должно.

По второй проблеме:
Если уж ведете разработку в 3ехзвенке, так извольте и кэш чистить

К примеру, вот такой код можно использовать
X++:
    xSession::removeAOC();
    SysTreeNode::refreshAll();
    SysFlushDictionary::main(_args);
    SysFlushAOD::main(_args);
    SysFlushData::main(_args);
    xSession::updateAOC();
По первой проблеме:
Есть хороший документ по этому поводу:
AX-300-TIP-058-v01.00-ENUS - Asynchronous Cache Flushing in Microsoft Business Solutions–Axapta 3.0 SP2
Почитайте
За это сообщение автора поблагодарили: Poleax (1), e@gle (1), oip (2), Kabardian (1).
Старый 19.07.2007, 17:56   #4  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
1. Нет, к сожалению так не должно быть до этого все работало по другому. Сейчас возникает ситуация когда данные везде одинаковые, когда просматриваешь их напрямую, а при работе функционала в класс, например, передаются устаревшие (или вообще непонятно какие).
2. Добавлять такой код бессмысленно, если зайдя в метод он не будет обнаружен.

Вообще-то мне кажется, что это не две разные проблемы, а разные проявления какой-то одной.
Старый 19.07.2007, 17:59   #5  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
За инфу спасибо.
Старый 19.07.2007, 18:01   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от snirk Посмотреть сообщение
1. Нет, к сожалению так не должно быть до этого все работало по другому. Сейчас возникает ситуация когда данные везде одинаковые, когда просматриваешь их напрямую, а при работе функционала в класс, например, передаются устаревшие (или вообще непонятно какие).
2. Добавлять такой код бессмысленно, если зайдя в метод он не будет обнаружен.

Вообще-то мне кажется, что это не две разные проблемы, а разные проявления какой-то одной.
1. Когда вы просматриваете все данные, делается запрос к базе.
а когда ищете значение, по ключу, он сперва ищется в кэше.

2. этот код надо не добавлять в нужный метод
Этот код нужно повесить на какой-то пукнт меню, и вызывать принудительно после внесения изменений.
Старый 19.07.2007, 18:07   #7  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Концептуально Аксапта предполагает, что кэшируются те таблицы, данные в которых редко изменяются.

У вас проблемы возникли на стандартной функциональности или на ваших модификациях? Решением может быть пересмотр метода кэширования на таблице.

Стандартные настройки Аксапты — не догма. На многих инсталляциях в последнее время на период настройки и начальной эксплуатации системы я, например, на плане счетов снижаю уровень кэширования до found. Иначе при редактировании плана счетов даже в однопользовательском режиме возникают ошибки обновления записи мною же ранее обновленной.

Так что думайте и экспериментируйте.
__________________
С уважением,
glibs®
Старый 19.07.2007, 18:16   #8  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
Дело в том, что проблема возникла не на новой функциональности, а на той функциональности которая уже долго работала без таких проблем.
И даже сучетом политики кэширования в Аксапте непонятна следующая ситуация:
Пользователь 1 изменил данные
прошло время ...
Пользователь 2 все равно видит какие-то старые данные, а
Пользователь 3 - новые, измененные
Старый 19.07.2007, 18:22   #9  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
Уровень кэширования стоит - NotInTTS
Старый 19.07.2007, 18:23   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вырезка из документа, на который я указал выше:

Цитата:
All in all, the new cache flush mechanism consists of:
• Every session records updates/inserts to a private list of tables updated
• When a session commits, its session private list is merged into an AOS global list of tables updated.
• At an interval set by the user, the AOS global list is written to the database, in a special row in SysLastValue table.
• At a user configurable interval, querying against cached tables will read the database stored list. If the list from the database has a higher cache version for the queried table, the local cache is flushed. This is on a table basis, so only if the local cache for this one table was used, and if the table was actually updated, will the cache be flushed prior to the read.
• All Thin clients do NOT read the database flush list; instead they query the AOS for its global list of updated tables. This ensures that a Thin Client will not conclude that a cache should flush at another frequency than the AOS does. If the client reads the information from the database it would occasionally read the flush info slightly before the AOS did. This caused the Client to flush the local cache before the AOS refreshed its cache, and so the client would read stale data from the AOS cache, but would have the new Cache Version registered, and so would be one version ‘behind’.
• The above AOS mechanism applies for all Fat Clients as well.
• The above Flush and Test interval is derived from a single MaxCacheSync time parameter and are both half of the MaxCacheSync time.
The net effect of the above is:
• All caches, be it on AOS, Fat Client, or Thin Client will be current within the MaxCacheSync time.
• Inactive clients (or AOS’s) will not cause extra network traffic (that is after half the MaxCacheSync has expired, no additional network traffic will occur).
• Due to the asynchronous write of flush info, network traffic is minimized, even though a lot more tables are now included in the flush report.
После этого, так как у вас нет KR1, внимательно перечитайте сообщение по ссылке, указанной выше
За это сообщение автора поблагодарили: Logger (3).
Теги
ax3.0, кэширование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Система оповещений в Аксапте (события в Аксапте) raunio DAX: Прочие вопросы 1 29.09.2005 15:44
Размышления на тему “Системы контроля версий в Аксапте”. Андре DAX: База знаний и проекты 31 07.02.2005 12:29
Проблема: русские шрифты в отчетах, формируемых на сервере. Anais DAX: Администрирование 3 17.11.2003 13:20
Русские шрифты в Аксапте vovkin DAX: База знаний и проекты 23 19.02.2003 14:42
Проблема 2002 года ?!!! lm DAX: Администрирование 8 02.02.2002 20:31

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

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

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