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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.06.2017, 11:04   #1  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Поговорим о глобальных кэшах в Аксапте? Как правильно?
Начиная с акс2009 все разработчики стандартного функционала все чаще и чаще используют globalCache для кэширования.

Изначально кэшировался доступ к объектам AOT, к treeNode, Dict*.
Потом все больше стали кэшировать выбранные записи (вместо свойства ChacheTable=EntireTable), теперь кэшируют все подряд.

Для опреденности, напомню, что:
  • речь идет о классе SysGlobalCache.
  • в Аксапте есть 4 глобальных кэша: Infolog.globalCahce(), Appl..globalCahce(), ClassFactory..globalCahce() серверная и клиентская части
  • глобальный кэш основан на dictionary (new Map(types::string, types:class))
  • глобальный кэш содержит статическую и волатильную часть
  • что нет способа ограничить размер глобального кэша, нет механизма устаревания данных, очистки устаревших данных. есть только сброс волатильной части при помощи flush. При этом сброс вызывается только из двух мест - InventDim и Kanban

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
Миниатюры
Нажмите на изображение для увеличения
Название: ax6.PNG
Просмотров: 16
Размер:	104.5 Кб
ID:	11481  
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
За это сообщение автора поблагодарили: alex55 (1), macklakov (5).
Старый 06.06.2017, 11:22   #3  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Я правильно понимаю, что ты не предлагаешь избавиться от кэширования,
а использовать синглтон для хранения кэша объектов и Lazy-инициализацию?

Подход.
Правда только в акс7.
И размазывает катастрофу с кэшами по всему приложению. )

Я скорее о том, что кэши сейчас:
  • хранят устаревшие объекты
  • имеют чудовищно низких hitRatio
  • раздуваются в памяти безо всяких ограничений.

кроме того, кэши сейчас делают на очень низкоуровневые "системные" объекты.
на мой взгляд кэширование уровнем-двумя выше дало бы намного больший эффект.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 06.06.2017, 11:56   #4  
Ivanhoe is offline
Ivanhoe
КОРУС Консалтинг
Аватар для Ivanhoe
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
КОРУС Консалтинг
 
3,469 / 1646 (61) ++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
За разработчиков не скажу, но консультантам и клиентам любое не прозрачное поведение добавляет много боли. Чем меньше будет бубнов из-за кеша, тем конечным пользователям системы будет комфортнее.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: mazzy (2), ta_and (3), macklakov (2).
Старый 06.06.2017, 12:37   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
 
3,251 / 1247 (48) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
SysGlobalCache хранит как правило не объекты, а результаты вычислений, которые иначе зафлудили бы БД миллионами мелких запросов. Что куда в семерке размазывается и как SysGlobalCache в принципе (при существующих паттернах его использования) может иметь низкий hit ratio и гды ты его смотришь, решительно непонятно.
Очистка SysGlobalCache - на совести того кто решает его использовать (он должен понимать какие изменения в системе должны этот кэш сбросить).
P.S. вообще есть стойкое ощущение что в исходном сообщении попутаны SysGlobalCache и SysGlobalObjectCache
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: dech (2).
Старый 06.06.2017, 12:37   #6  
trud is offline
trud
Участник
 
372 / 237 (8) ++++++
Регистрация: 07.06.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Я скорее о том, что кэши сейчас:[*]хранят устаревшие объекты
и еще в копилку - кеши для экстеншенов
-отличный пример как "грамотно" надо использовать кэши
https://ax.help.dynamics.com/en/wiki...runbase-class/
т.е. на классе перед run устанавливается глобальная переменная, далее эта переменная анализируется в методе на таблице(не связанным никак с классом) и если установлена, то считается что этот метод был вызван из класса.
т.е. я так понимаю если очистка в run из-за каких-то причин не сработает, то метод будет все время думать что он вызван из класса. самое грамотное что ошибку никто не сможет повторить можно будет устраивать конкурсы на найди ошибку
Старый 06.06.2017, 12:43   #7  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
Что куда в семерке размазывается и как SysGlobalCache в принципе (при существующих паттернах его использования) может иметь низкий hit ratio и гды ты его смотришь, решительно непонятно.
Именно. Так вопрос и составлен.

Раз автор вопроса такой размазанный и невнятный,
Расскажи как правильно, на твой взгляд? что нужно делать на самом деле и куда смотреть настоящему профессионалу?

Цитата:
Сообщение от Vadik Посмотреть сообщение
P.S. вообще есть стойкое ощущение что в исходном сообщении попутаны SysGlobalCache и SysGlobalObjectCache
Прекрасно!!!!
Расскажи подробнее?


Цитата:
Сообщение от trud Посмотреть сообщение
можно будет устраивать конкурсы на найди ошибку
)))
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 06.06.2017, 13:35   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
 
3,251 / 1247 (48) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Я уже написал для чего "правильно" надо использовать SysGlobalCache, мое "правильно" и "правильно" от MS в этом случае совпадают

Ты сделал несколько спорных (на мой скромный взгляд) утверждений
  • хранят устаревшие объекты
  • имеют чудовищно низких hitRatio
  • раздуваются в памяти безо всяких ограничений.

Я предлагаю тебе попытаться их обосновать. Попробуешь ?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 06.06.2017, 13:58   #9  
dech is offline
dech
Участник
Аватар для dech
 
384 / 136 (5) +++++
Регистрация: 25.06.2009
Адрес: Омск
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/
__________________
// no comments
За это сообщение автора поблагодарили: mazzy (2).
Старый 06.06.2017, 14:07   #10  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
Я уже написал для чего "правильно" надо использовать SysGlobalCache, мое "правильно" и "правильно" от MS в этом случае совпадают

Ты сделал несколько спорных (на мой скромный взгляд) утверждений
  • хранят устаревшие объекты
  • имеют чудовищно низких hitRatio
  • раздуваются в памяти безо всяких ограничений.

Я предлагаю тебе попытаться их обосновать. Попробуешь ?
легко.
Берем акс2012, открываем дерево объектов, смотрим перекрестные ссылки.

SysGlobalCache используется используется 1720 раз.
хранит всякую гадость. включая, и Record, и изображения и чего только не хранит.

SysGlobalObjectCache используется 1627 раз.
хранит всякую гадость. включая record.

разница между этими кэшами - будут ли значения видны разным клиентским сессиям. SysGlobalObjectCache - виден между сессиями, а SysGlobalCache "живет" в пределах одной сессии.

все упомянутые в этой ветке глобальные кэши не следят за своим размером.
все упомянутые в этой ветке глобальные кэши не имеют механизма устаревания данных.
все упомянутые в этой ветке глобальные кэши можно полностью очистить.


SysGlobalCache не следят за своим размером.
SysGlobalCache не имеют механизма устаревания данных.
все упомянутые в этой ветке глобальные кэши можно полностью очистить.

на мой взгляд, методика работы с этими кэшами не должна отличаться.
но хорошо что ты сказал про SysGlobalObjectCache.

===========================
про hitRatio и размер пока придется поверить.
или проверить самостоятельно - SysGlobalCache вполне доступен для редактирования. можно добавить измерялки в свой инстанс.

===========================
Итак, вопросы:

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 33
Размер:	152.5 Кб
ID:	11483   Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 15
Размер:	125.0 Кб
ID:	11484  

__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 06.06.2017 в 14:21.
Старый 06.06.2017, 14:16   #11  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/
точно! размер кэша и количество хранимых элементов в SysGlobalObjectCache можно задавать. Ура, товарищи.

Цитата:
SGOC is an LRU cache. When the cache is full, the least recently used element will be removed to accommodate newer element. Sizing the SGOC correctly will pay significant performance improvement over poorly sized SGOC setting. The number of elements Global Object cache can hold is defined in Server Configuration form under performance Optimization fast tab
===========================
Итак, вопросы:

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 06.06.2017, 17:22   #12  
imir is offline
imir
Участник
 
112 / 90 (4) ++++
Регистрация: 28.05.2010
1) Касаемо 12-шки появление global cahe связано в основном с нормализацией БД - там, где раньше уповали в основном на кэширование таблиц - теперь приходится собирать из 3-х, 5-ти таблиц и класть в кэш. Т.е. имеем решение проблемы, созданной самостоятельно.

2) Наличие этих кэшей сильно расслабляет разработчиков core. Я находил метод в разноске покупок, в котором кешировались наследники некого класса, и делалось это полным перебором DictClass ТРИ минуты. Соотв. мы долго искали эти тормоза, которые проявляются раз в неделю на холодном AOS у произвольного пользователя.

3) За все время запила 12-шки ни разу не пришлось прибегнуть к глобальному кешированию самостоятельно. Что говорит о том, что необходимость глобал-кеша - либо признак хреновой архитектуры, либо одно из двух.

Последний раз редактировалось imir; 06.06.2017 в 17:28.
За это сообщение автора поблагодарили: mazzy (2).
Старый 06.06.2017, 17:46   #13  
ta_and is offline
ta_and
Участник
 
165 / 91 (4) ++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от imir Посмотреть сообщение
признак хреновой архитектуры
не стал бы так огульно... )

Думаю, что все опытные программисты понимают, что кэш - это зло. И придуман кэш не от хорошей жизни, а потому, что без него с производительностью в некоторых местах была бы совсем труба.

Из этих пониманий (у меня) сложились стойкие убеждения:
1. Кэш нужно использовать только тогда, когда пользователь УЖЕ СТОЛКНУЛСЯ с реальными проблемами в производительности.
2. Кэш можно использовать только для улучшения производительности
3. Использование кэша для решения алгоритмических или архитектурных целей - типа передачи параметров - не просто моветон, а грубейшее нарушение и незнание основ программирования.
4. Кэшировать можно все что угодно, если область видимости и изменяемости этого всего чего угодно абсолютно зафиксирована. (пояснять не хочу, догадайтесь сами о чем это я)
5. Какой механизм выбрать для кэширования - клиент, сервер, тд.. тп.. зависит от решаемой задачи по улучшению производительности и от пункта 4.

вот как то так.
За это сообщение автора поблагодарили: mazzy (2), Ivanhoe (2).
Старый 06.06.2017, 19:20   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,331 / 811 (30) +++++++
Регистрация: 13.01.2004
Цитата:
Сообщение от ta_and Посмотреть сообщение
не стал бы так огульно... )

Думаю, что все опытные программисты понимают, что кэш - это зло. И придуман кэш не от хорошей жизни, а потому, что без него с производительностью в некоторых местах была бы совсем труба.
Проблема в том, что у Axapta довольно высокий "порог вхождения" для новых разработчиков. Причем чем дальше, тем порог все выше и выше. А для новичков глобальные объекты (любые, не только кеш) - это "палочка-выручалочка".

Из этого следует, что опытные-то "знают, как надо", но новички будут использовать к месту и не к месту, поскольку не знают других способов. Или банально нет времени искать. При этом и "опытные" здесь не исключение. Если "сроки горят", то не до красоты. Успеть бы...

Ну, и как результат. Сам факт наличия такого инструмента приведет к тому, что он очень быстро превратиться в глобальную помойку непонятно чего. Что, собственно, и так уже происходит...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Ivanhoe (2).
Старый 06.06.2017, 19:22   #15  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,504 / 458 (19) +++++++
Регистрация: 10.10.2005
Адрес: PHP
Цитата:
Сообщение от ta_and Посмотреть сообщение
...
кэш - это зло.
...
Кэш нужно использовать только тогда, когда пользователь УЖЕ СТОЛКНУЛСЯ с реальными проблемами в производительности.
...
Точно так. Я тут столкнулся на днях когда коснулся рабочих календарей. Спасибо создателем есть волшебная переменная на отключение кэша. А то задолбался тестировать.

Не нужно кэширование до тех пор пока нет отдельной задачи на улучшение производительности. При первоначальной разработке и тестировании ничего кроме геморроя это не приносит.

Понятно что при разработке некий минимум как табличные индексы, приемлимые join и прочее.
Но так чтобы изначально писать с кэшированием - крайне глупо. Одни проблемы приносит.
За это сообщение автора поблагодарили: Ivanhoe (2).
Старый 06.06.2017, 19:42   #16  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
спасибо выступившим.

я бы все-таки предложил сосредоточиться на вопросе: а что можно сделать?

в какой-то момент у меня была идея сделать стоп-лист по ключам кэша.
была идея перехватить set и удалять старое. или что-то вроде сборщика мусора, который работает по таймеру.
но все это как-то кисло.

что можно сделать в текущей ситуации?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 06.06.2017 в 19:46.
Старый 06.06.2017, 19:54   #17  
ta_and is offline
ta_and
Участник
 
165 / 91 (4) ++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Сообщение от mazzy Посмотреть сообщение
что можно сделать
Была такая поговорка у нас:
- Хлам нельзя исправить. Хлам можно только выкинуть и написать заново.
Старый 06.06.2017, 20:46   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2014
 
2,798 / 1436 (53) ++++++++
Регистрация: 12.10.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
я бы все-таки предложил сосредоточиться на вопросе: а что можно сделать?

в какой-то момент у меня была идея сделать стоп-лист по ключам кэша.
была идея перехватить set и удалять старое. или что-то вроде сборщика мусора, который работает по таймеру.
но все это как-то кисло.

что можно сделать в текущей ситуации?
Может быть стоит озвучить хотя бы 5 проблем с которыми столкнулись из-за кеширования и от них отталкиваться уже.
Думаю так будет проще для генерации идей.
Старый 06.06.2017, 20:56   #19  
online
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,620 / 3252 (150) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
SysGlobalCache не следят за своим размером.
SysGlobalCache не имеют механизма устаревания данных.
в результате
= растет используемая память.
= а из-за того, что java-объекты не освобождаются, сборщику мусора все сложнее и сложнее работать.
= эффективность кэша снижается из-за того, что кэш хранит много объектов

вплоть до рекомендации "в профилактических целях периодически перезагружать АОСы"
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 06.06.2017, 21:15   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,864 / 1982 (74) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
в результате
= растет используемая память.
..."
Как-то было доказано, что это именно из-за SysGlobalCache или это предположение?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обращение к http-сервису в Аксапте Lucky13 DAX: Программирование 31 24.03.2015 19:37
Функция поиска подстроки, чувствительная к регистру . Есть ли такая в аксапте? ATimTim DAX: Программирование 4 13.02.2006 15:37
Система оповещений в Аксапте (события в Аксапте) raunio DAX: Прочие вопросы 1 29.09.2005 15:44
SQL в Аксапте Smith DAX: Программирование 7 04.03.2005 11:13
Как правильно настроить возврат материалов из производства? Tony Green DAX: Функционал 14 22.10.2004 11:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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