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 06.06.2017, 11:04   #1  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Поговорим о глобальных кэшах в Аксапте? Как правильно?
Начиная с акс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

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
Attached Thumbnails
Click image for larger version

Name:	ax6.PNG
Views:	542
Size:	104.5 KB
ID:	11481  
__________________
полезное на axForum, github, vk, coub.
This post has been rated by: alex55 (1), macklakov (5).
Old 06.06.2017, 11:12   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Join Date: 09.07.2002
Location: Parndorf, AT
https://blogs.msdn.microsoft.com/mfp...tatic-members/
Old 06.06.2017, 11:22   #3  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Я правильно понимаю, что ты не предлагаешь избавиться от кэширования,
а использовать синглтон для хранения кэша объектов и Lazy-инициализацию?

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

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

кроме того, кэши сейчас делают на очень низкоуровневые "системные" объекты.
на мой взгляд кэширование уровнем-двумя выше дало бы намного больший эффект.
__________________
полезное на axForum, github, vk, coub.
Old 06.06.2017, 11:56   #4  
Ivanhoe is offline
Ivanhoe
Участник
Ivanhoe's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Join Date: 29.09.2005
Location: Санкт-Петербург
За разработчиков не скажу, но консультантам и клиентам любое не прозрачное поведение добавляет много боли. Чем меньше будет бубнов из-за кеша, тем конечным пользователям системы будет комфортнее.
__________________
Ivanhoe as is..
This post has been rated by: mazzy (2), ta_and (3), macklakov (2).
Old 06.06.2017, 12:37   #5  
Vadik is offline
Vadik
Модератор
Vadik's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Join Date: 18.11.2002
Location: гражданин Москвы
SysGlobalCache хранит как правило не объекты, а результаты вычислений, которые иначе зафлудили бы БД миллионами мелких запросов. Что куда в семерке размазывается и как SysGlobalCache в принципе (при существующих паттернах его использования) может иметь низкий hit ratio и гды ты его смотришь, решительно непонятно.
Очистка SysGlobalCache - на совести того кто решает его использовать (он должен понимать какие изменения в системе должны этот кэш сбросить).
P.S. вообще есть стойкое ощущение что в исходном сообщении попутаны SysGlobalCache и SysGlobalObjectCache
__________________
-ТСЯ или -ТЬСЯ ?
This post has been rated by: dech (2).
Old 06.06.2017, 12:37   #6  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1635 (57) ++++++++
Join Date: 07.06.2003
Blog Entries: 1
Quote:
Originally Posted by mazzy View Post
Я скорее о том, что кэши сейчас:[*]хранят устаревшие объекты
и еще в копилку - кеши для экстеншенов
-отличный пример как "грамотно" надо использовать кэши
https://ax.help.dynamics.com/en/wiki...runbase-class/
т.е. на классе перед run устанавливается глобальная переменная, далее эта переменная анализируется в методе на таблице(не связанным никак с классом) и если установлена, то считается что этот метод был вызван из класса.
т.е. я так понимаю если очистка в run из-за каких-то причин не сработает, то метод будет все время думать что он вызван из класса. самое грамотное что ошибку никто не сможет повторить можно будет устраивать конкурсы на найди ошибку
Old 06.06.2017, 12:43   #7  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by Vadik View Post
Что куда в семерке размазывается и как SysGlobalCache в принципе (при существующих паттернах его использования) может иметь низкий hit ratio и гды ты его смотришь, решительно непонятно.
Именно. Так вопрос и составлен.

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

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


Quote:
Originally Posted by trud View Post
можно будет устраивать конкурсы на найди ошибку
)))
__________________
полезное на axForum, github, vk, coub.
Old 06.06.2017, 13:35   #8  
Vadik is offline
Vadik
Модератор
Vadik's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Join Date: 18.11.2002
Location: гражданин Москвы
Я уже написал для чего "правильно" надо использовать SysGlobalCache, мое "правильно" и "правильно" от MS в этом случае совпадают

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

Я предлагаю тебе попытаться их обосновать. Попробуешь ?
__________________
-ТСЯ или -ТЬСЯ ?
Old 06.06.2017, 13:58   #9  
dech is offline
dech
Участник
dech's Avatar
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Join Date: 25.06.2009
Location: Омск
Blog Entries: 3
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/
__________________
// no comments
This post has been rated by: mazzy (2).
Old 06.06.2017, 14:07   #10  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by Vadik View Post
Я уже написал для чего "правильно" надо использовать SysGlobalCache, мое "правильно" и "правильно" от MS в этом случае совпадают

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

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

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

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

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

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


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

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

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

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

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
Attached Thumbnails
Click image for larger version

Name:	1.PNG
Views:	534
Size:	152.5 KB
ID:	11483   Click image for larger version

Name:	2.PNG
Views:	449
Size:	125.0 KB
ID:	11484  

__________________
полезное на axForum, github, vk, coub.

Last edited by mazzy; 06.06.2017 at 14:21.
Old 06.06.2017, 14:16   #11  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by dech View Post
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/
точно! размер кэша и количество хранимых элементов в SysGlobalObjectCache можно задавать. Ура, товарищи.

Quote:
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
===========================
Итак, вопросы:

что вы думаете о глобальном кэшировании в Аксапте?
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
__________________
полезное на axForum, github, vk, coub.
Old 06.06.2017, 17:22   #12  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Join Date: 28.05.2010
1) Касаемо 12-шки появление global cahe связано в основном с нормализацией БД - там, где раньше уповали в основном на кэширование таблиц - теперь приходится собирать из 3-х, 5-ти таблиц и класть в кэш. Т.е. имеем решение проблемы, созданной самостоятельно.

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

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

Last edited by imir; 06.06.2017 at 17:28.
This post has been rated by: mazzy (2).
Old 06.06.2017, 17:46   #13  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Join Date: 26.02.2002
Location: СПб
Quote:
Originally Posted by imir View Post
признак хреновой архитектуры
не стал бы так огульно... )

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

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

вот как то так.
This post has been rated by: mazzy (2), Ivanhoe (2).
Old 06.06.2017, 19:20   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,726 / 1208 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Quote:
Originally Posted by ta_and View Post
не стал бы так огульно... )

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

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

Ну, и как результат. Сам факт наличия такого инструмента приведет к тому, что он очень быстро превратиться в глобальную помойку непонятно чего. Что, собственно, и так уже происходит...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
This post has been rated by: Ivanhoe (2).
Old 06.06.2017, 19:22   #15  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Join Date: 10.10.2005
Location: Westlands
Quote:
Originally Posted by ta_and View Post
...
кэш - это зло.
...
Кэш нужно использовать только тогда, когда пользователь УЖЕ СТОЛКНУЛСЯ с реальными проблемами в производительности.
...
Точно так. Я тут столкнулся на днях когда коснулся рабочих календарей. Спасибо создателем есть волшебная переменная на отключение кэша. А то задолбался тестировать.

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

Понятно что при разработке некий минимум как табличные индексы, приемлимые join и прочее.
Но так чтобы изначально писать с кэшированием - крайне глупо. Одни проблемы приносит.
This post has been rated by: Ivanhoe (2).
Old 06.06.2017, 19:42   #16  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
спасибо выступившим.

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

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

что можно сделать в текущей ситуации?
__________________
полезное на axForum, github, vk, coub.

Last edited by mazzy; 06.06.2017 at 19:46.
Old 06.06.2017, 19:54   #17  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Join Date: 26.02.2002
Location: СПб
Quote:
Originally Posted by mazzy View Post
что можно сделать
Была такая поговорка у нас:
- Хлам нельзя исправить. Хлам можно только выкинуть и написать заново.
Old 06.06.2017, 20:46   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,004 / 3299 (118) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by mazzy View Post
я бы все-таки предложил сосредоточиться на вопросе: а что можно сделать?

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

что можно сделать в текущей ситуации?
Может быть стоит озвучить хотя бы 5 проблем с которыми столкнулись из-за кеширования и от них отталкиваться уже.
Думаю так будет проще для генерации идей.
Old 06.06.2017, 20:56   #19  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Originally Posted by mazzy View Post
SysGlobalCache не следят за своим размером.
SysGlobalCache не имеют механизма устаревания данных.
в результате
= растет используемая память.
= а из-за того, что java-объекты не освобождаются, сборщику мусора все сложнее и сложнее работать.
= эффективность кэша снижается из-за того, что кэш хранит много объектов

вплоть до рекомендации "в профилактических целях периодически перезагружать АОСы"
__________________
полезное на axForum, github, vk, coub.
Old 06.06.2017, 21:15   #20  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
Quote:
Originally Posted by mazzy View Post
в результате
= растет используемая память.
..."
Как-то было доказано, что это именно из-за SysGlobalCache или это предположение?
Tags
sysglobalcache, кэширование

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Обращение к 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

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 01:49.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.