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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.11.2013, 13:39   #1  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
Кэширование данных таблиц
Не подскажите, как отключить кэширование данных (или очистить кэш) для всех таблиц? Читал форум, использовал что-то типа:
Код:
xSession::removeAOC();    
SysTreeNode::refreshAll();    
SysFlushDictionary::main(_args);    
SysFlushAOD::main(_args);    
SysFlushData::main(_args);    
xSession::updateAOC();
не получается. Если убрать галочку в Сервис-Параметры-Кэширование таблиц у таблицы, а потом посмотреть её (select *), то в sql server profiler видно что запрос не проходит, данные тянет по видимому откуда-то из кэша.
Старый 25.11.2013, 13:45   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Все перечисленное, имхо, к разработке относится.

Попробуйте: SysGlobalObjectCache::clearAllCaches();
__________________
Ivanhoe as is..
Старый 25.11.2013, 13:55   #3  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
А как в Ax2009? Там такого класса нет...
Старый 25.11.2013, 13:59   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от n_yury Посмотреть сообщение
Не подскажите, как отключить кэширование данных (или очистить кэш) для всех таблиц? Читал форум, использовал что-то типа...
Вы на верном пути, но не учли, видимо, одно обстоятельство: Аксапта - трехуровневая система, где кроме СУБД и клиента есть еще АОС, так вот кэширование табличных данных происходит на двух уровнях: клиенте и АОСе, поэтому и сбрасывать кэш также нужно на двух уровнях, а если вы запускали приведенный код из джобика, то сбросили кэш лишь на клиенте.
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Попробуйте: SysGlobalObjectCache::clearAllCaches();
Мне кажется, название метода в данном случае надо трактовать в контексте соответствующего класса: он сбрасывает все кэши, использующие для хранения механизм SysGlobalObjectCache (т.е. разделяемые между всеми сессиями того или иного АОСа), а вовсе не сбрасывает "все кэши вообще", включая клиентский кэш объектов приложения и кэши табличных данных. К тому же SysGlobalObjectCache есть только в 2012-й.

PS. Насколько я понимаю, для данного конкретного АОСа и клиентской сессии сброс кэшей табличных данных происходит при вызове Dictionary::dataFlush() на клиенте и на сервере.

Последний раз редактировалось gl00mie; 25.11.2013 в 14:02.
Старый 25.11.2013, 14:44   #5  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
Цитата:
Сообщение от gl00mie Посмотреть сообщение
PS. Насколько я понимаю, для данного конкретного АОСа и клиентской сессии сброс кэшей табличных данных происходит при вызове Dictionary::dataFlush() на клиенте и на сервере.
Не подошло. Для кэша данные тянутся из теблицы - видно что в sql server profiler проскакивает select. Потом захожу в таблицу, меняю значение, а программа показывает закэшированные, свои данные, хотя в БД уже не те значения. Dictionary::dataFlush() не помогло.
Старый 25.11.2013, 15:00   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от n_yury Посмотреть сообщение
как отключить кэширование данных (или очистить кэш) для всех таблиц?
Цитата:
Сообщение от n_yury Посмотреть сообщение
захожу в таблицу, меняю значение, а программа показывает закэшированные, свои данные, хотя в БД уже не те значения. Dictionary::dataFlush() не помогло.
Приведенный код - это сброс кэша, а не полное его отключение. Если вы поменяли табличные данные в БД Аксапты минуя АОС, а соотв. таблица кэшируется, то чтобы увидеть актуальные данные в Аксапте, нужно сначала сбросить кэш (в вашем примере - после изменения, а не до него). В общем и целом отключить кэширование данных вот прям для всех таблиц можно, изменив их свойство CacheLevel в AOT на None, однако, стоит 10 раз подумать над постановкой задачи, прежде чем применять подобное "решение". Серверный и клиентский кэши табличных данных придуманы не от нефиг делать, они существенно повышают производительность работы, и полное принудительное отключение кэширования эту производительность опустит ниже плинтуса.
Как именно звучит постановка задачи в вашем случае (без "орг.выводов" про то, что нужно отключить кэширование всех таблиц)?
За это сообщение автора поблагодарили: M.Ruslan (1).
Старый 25.11.2013, 15:27   #7  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
В процессе изучения Ax 2009 хочу видеть не только код, но и все запросы, которые проходят, а то ax один раз вытягивает данные, и как будто более не обращается к таблице. Например ax не обращается к BankGroup в SQL сервере при разноске налога, потому что закэшировал. Допустим про BankGroup я знаю, но про другие - нет.
P.S. Я один работаю с виртуалкой. А если куча народу сидит на серваке, то конечно не стоит отключать.
Старый 25.11.2013, 15:33   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Включите трассировку SQL-запросов (Сервис/Параметры/SQL - включить Мониторинг запросов SQL и выбрать канал(ы) вывода в группе "Множественные запросы"). В инфолог выводить стоит только при включении трассировки множественных запросов на короткое время, иначе невозможно будет работать и разбираться в тоннах сообщений.
Старый 25.11.2013, 17:19   #9  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
Угу. CacheLookup=none работает. Я думал, что там где-то галочка или ключ командной строки какой-нибудь...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012 Наследование таблиц. Краткое описание механизма sukhanchik DAX: Программирование 32 21.09.2018 17:56
Создание снимков изменений в базе данных Ace of Database DAX: Программирование 17 01.11.2011 12:34
Скрипт для переноса данных Ax3.0 (Oracle) - Ax2009 (MSSQL) someOne DAX: Программирование 2 14.06.2011 14:53
Журнал базы данных для таблиц администрирования Roman DAX: Администрирование 3 29.05.2008 16:04
Как настроить репликацию таблиц Аксапта в хранилище данных для OLAP max_spbti DAX: Функционал 4 28.06.2004 10:32

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

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

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