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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.06.2017, 21:24   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Как-то было доказано, что это именно из-за SysGlobalCache или это предположение?
нет, не доказано.
видно число элементов в кэше, но не видно используемую память.
но в ходе разбирательств выяснилось много чего другого забавного. я сформулировал выше.

в конкретном случае разберемся. и с кэшами, и с памятью.

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

в качестве побочного результата хочется получить знания о виндовых счетчиках и как публиковать данные из аксапты в них.
Как добавить виндовый счетчик (performance monitor), который отображал бы администратору происходящее внутри аксапты?
(кстати, Макс, видел твою внутреннюю страничку про регистрацию счетчиков и мониторинг. для всех бы такую. чтобы не зависело от внутренних служб)

также было бы круто научиться перехватывать события закрытого класса SysGlobalObjectCache. )))
__________________
полезное на axForum, github, vk, coub.
Старый 07.06.2017, 11:10   #22  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
нет, не доказано.
видно число элементов в кэше, но не видно используемую память.
но в ходе разбирательств выяснилось много чего другого забавного. я сформулировал выше.
Мне кажется что основные проблемы идут от протухания кешей.
Причем проблема не только в указанных вами кешах (SysGlobalCache, etc), а вообще в том, что ядро много чего кеширует и потом не синхронизирует значения в кеше с актуальными данными.

Возможно это будет оффтопик, но может быть составим реестр известных проблем и таблеток от них ?
Навскидку
1. Проблема с добавлением по живой новых полей в табличку
Ax 2012 R2. Поле "не извлечено"

2. Проблема при создании новых классов
Extension Framework and SysGlobalCache issue

Вообще, похоже в 2012-й решили жестко все кешировать, вроде бы это и неплохо, но постоянно лезут проблемы с неактуальностью значений в кешах (не только Sysglobalcache)

3. А вот тут кеша нет, а надо бы сделать кеширование.
Долгий запуск AX2012 R2
Старый 07.06.2017, 12:07   #23  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Кеширование курсов валют, кеширование цен, кеширование календарей - это из того, с чем пользователи сталкиваются.
__________________
Ivanhoe as is..
Старый 07.06.2017, 12:24   #24  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
4. Таблетка для курсов валют
О сломанных шестеренках в большом моторе
Тоже кеш протухал

Последний раз редактировалось Logger; 07.06.2017 в 13:54.
Старый 07.06.2017, 12:32   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а давайте про реестр в другой ветке?
реестр создавался - http://stopbugs.ru.
основная проблема как и с кэшами - информация очень быстро протухает. кто-то должен следить за актуальностью багов и таблеток. на общественных началах эту работу никто не готов тащить.

да... кэширование цен - это вручную используемый SysGlobalCache + кэширование на уровне таблиц EntireTable... адская смесь.
__________________
полезное на axForum, github, vk, coub.
Старый 07.06.2017, 13:24   #26  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Пожалуй отмечусь: На мой взгляд - единственная реальная проблема на внедрениях - это протухание кэша. Проблем с памятью и гипотетическим низким hit/miss ratio я не видел.
На мой взгляд, шагом вперед стала бы поддержка cache scope как некого прикладного объекта в AOD. И чтобы можно было бы где-то на уровне таблицы указывать, какие скопы надо очищать при изменении таблицы. Во всех случаях это не спасло бы, но для типичных ситуаций малость облегчило бы кодинг.
За это сообщение автора поблагодарили: mazzy (2), Logger (3), NetBus (2).
Старый 07.06.2017, 13:35   #27  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Будем справедливы.
Как отметил Vadik и dech, есть SysGlobalObjectCache.
Там есть механизм вытеснения. Но вытесняются только те значения, которые не влезают в отведенные количественные лимиты (число записей, объем памяти)

Другое дело, что в текущем коде SysGlobalObjectCache и SysGlobalCache используются поровну.

Цитата:
Сообщение от Vadik Посмотреть сообщение
SysGlobalObjectCache
Цитата:
Сообщение от dech Посмотреть сообщение
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/
__________________
полезное на axForum, github, vk, coub.
Старый 07.06.2017, 14:39   #28  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
Во всех случаях это не спасло бы, но для типичных ситуаций малость облегчило бы кодинг.
Интересно, а если предусмотреть вариант Global flush - т.е. очистка всех кешей - которые есть как в kernel так и определенных из X++ кода. - Будут от этого какие-нибудь риски или нет ?

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

Это было бы нужно прежде всего при работе 24/7 когда нужно подправить какие-то настройки или накатить код но не останавливая весь комплекс. 2009-я аксапта это позволяла. В 2012-й похоже от такого отказались, а жаль.
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.06.2017, 14:41   #29  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Мне вот интересно, если SysGlobalCache используется в рамках сессии, а SysGlobalObjectCache - в рамках AOS-а, то как жить дальше, когда у меня имеется 2 AOS-а и мне нужно закэшировать что-то прям ваще глобальное?
__________________
// no comments
Старый 07.06.2017, 17:30   #30  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от dech Посмотреть сообщение
то как жить дальше, когда у меня имеется 2 AOS-а и мне нужно закэшировать что-то прям ваще глобальное?
SysLastValue
__________________
полезное на axForum, github, vk, coub.
Старый 07.06.2017, 18:41   #31  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Интересно, а если предусмотреть вариант Global flush - т.е. очистка всех кешей - которые есть как в kernel так и определенных из X++ кода. - Будут от этого какие-нибудь риски или нет ?
Конечно. Если будет обнулен кеш с результатами промежуточных расчетов в процессе этого самого расчета.

Собственно, глобальная переменная потому и "глобальная" что никак и ни с чем не связана. Как следствие, сделать какой-либо вывод о том, что данная переменная уже никак и нигде не используется - невозможно. Нет никаких критериев, по которым этом можно было бы сделать. Всегда есть риск, что будет удалено что-то нужное... Используемое "вот прям счаз"

В теории, сам разработчик должен указать "область видимости". Т.е. событие, по наступлении которого глобальную переменную можно удалить. Ну, там, некий процесс завершился или время вышло. Но! Раз такая переменная вообще была создана, значит разработчик как раз и не в состоянии проконтролировать эту самую "область видимости"

Единственный выход - не создавать глобальный кеш. Но это уже невозможно. Джина выпустили из бутылки
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.06.2017, 18:59   #32  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Как следствие, сделать какой-либо вывод о том, что данная переменная уже никак и нигде не используется - невозможно.
Ну, почему же? Это ж java. там счетчики ссылок есть.

если обнулить ссылку в глобальном кэше,
то сам объект не удалится, у него просто уменьшится счетчик ссылок.

те, объекты, у которых счетчик ссылок = 0, попадут в следующую итерацию сборщика мусора. там в процессе сборки мусора и будут удалены.
__________________
полезное на axForum, github, vk, coub.
Старый 07.06.2017, 21:34   #33  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ну, почему же? Это ж java. там счетчики ссылок есть.
Ссылка возникает в момент обращения. Но сама идея глобальных объектов в том и заключается, что обращение будет отложено.

Ну, например, процесс 1 сформировал глобальный объект и был завершен. А потом, спустя некоторое время, был запущено процесс 2, который как раз и обратился за данными глобального объекта.

Такое "отложенное" обращение счетчик ссылок не поймает. Просто нет ссылок на момент вычисления.

Причем не факт, что это просто кеш. Это может быть и промежуточные расчеты в какой-то сложной конфигурации классов
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.06.2017, 04:00   #34  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,245 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от fed Посмотреть сообщение
Проблем с памятью и гипотетическим низким hit/miss ratio я не видел.
У нас чуть меньше 50 AOS и 1500 пользователей через Citrix. Версия 2012 R2. Мы ловим все возможные проблемы с кэшем. Самые большие проблемы с табличным кэшированием. Таблица в лимит по памяти не умещатеся, свопится на диск. Приходится увеличивать лимит в несколько раз. И, как следствие, приходится на сервера в несколько раз больше памяти накидывать. Причем кэш сохраняется и на сервере и в клиентской сессии, т.е. апгрейдить приходится и AOS и клиентские сервера. Но это еще не все. Сервера между собой синхронизируют кэш по какому-то таинственному протоколу, из-за которого система может неожиданно начать подтормаживать и данные могут оказаться неактуальными.
__________________
Isn't it nice when things just work?
Старый 08.06.2017, 05:25   #35  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,245 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от mazzy Посмотреть сообщение
что вы думаете о глобальном кэшировании в Аксапте?
музейный экспонат
Цитата:
Сообщение от mazzy Посмотреть сообщение
как правильно, на ваш взгляд кэшировать, а как неправильно?
что подлежит кэшированию, а что кэшировать ни в коем случае нельзя?
Сначала надо определиться, зачем вообще нужно кэширование?
Я могу предположить что цель это снизить количество обращений клиент-сервер. Тогда:
Цитата:
Сообщение от mazzy Посмотреть сообщение
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
Для начала, админам надо дать инструменты управления кэшем. У них должны быть инструменты собирать статистику отправляемых запросов, с точностью до AOS и с точностью до клиента. У них должны быть инструменты упраления кэшем через настройки, без необходимости менять исходники. Опять таки, в разрезе AOS. И у них дожны быть инструменты управления механизмом кэширования. Как минимум, принудительный сброс на выбранных серверах.
Почему в разрезе AOS? Потому что разные сервера обычно занимаются разными задачами. Одному нужна хорошо откэшированная ГК, а другому хорошо откэшированный склад. А не "средняя температура по больнице" как сейчас.
Еще не плохо бы эти настройки сделать экспортируемыми/импортируемыми. Тогда можно будет поднимать "событийные" настройки кэширования. К примеру, на закрытие склада или финансового периода, рассчеты сводного планирования и т.д.
Еще важный вопрос, это синхронизация кэша между серверами. Это отнюдь не тривиальная задача. И если у SQL админа есть куча инструментов по отлову блокировок и избавления от них, то в случае множественных AOS-ов, остается лишь скакать с бубном и приносить девственников в жертву, в попытке умилостивить сереверных духов.
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: mazzy (2), NetBus (2).
Старый 08.06.2017, 08:59   #36  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от macklakov Посмотреть сообщение
с точностью до AOS и с точностью до клиента.
другими словами, с точностью до сессии?
но тогда получается внутриаксаптовский инструмент типа онлайнпользователей.

внешний инструмент с точностью до компа.
или не?
__________________
полезное на axForum, github, vk, coub.
Старый 08.06.2017, 09:45   #37  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,245 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от mazzy Посмотреть сообщение
другими словами, с точностью до сессии?
но тогда получается внутриаксаптовский инструмент типа онлайнпользователей.
Не совсем. Идея в следующем. Часто AOS разделяют по функциям. Этот MRP считает, а этот всякие системные jobs гоняет, на этом сидят пользователи, а этот для интеграции. Делается это для того, чтобы снизить вероятность конкуренции за ресурсы. И пользователи с разными ролями обычно налегат на разные ресурсы. Поэтому хотелось бы управление кэшированием не из кода, а из настроек. Чтобы, собрав статистику, можно было перенастроить кэширование на конкретом AOS. Или для конекретного подмножества пользователей.
Почему это важно? Потому что, согласно опыту последних 6-ти лет, продуктовая команда имеет очень смутное представление о том, что нужно клиентам. И эта размытость образа происходит, опять таки, из-за средней температуры по больнице. Клиенты разные, им нужно разное. Причем хотелки имет свойство изменяться со временем. Разработчик просто не в состоянии определить как лучше будет откэшировать, т.к. он может лишь догадываться о том, какую топологию предпочтет клиент.
А вот админ, сопровождающий конкретного клиента, обычно точно знает где у него узкое место. Где и что надо откэшировать чтобы разгрузить конкретно вот этот канал и эти таблицы в базе данных.
__________________
Isn't it nice when things just work?
Старый 08.06.2017, 09:45   #38  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от macklakov Посмотреть сообщение
У нас чуть меньше 50 AOS и 1500 пользователей через Citrix. Версия 2012 R2. Мы ловим все возможные проблемы с кэшем. Самые большие проблемы с табличным кэшированием. Таблица в лимит по памяти не умещатеся, свопится на диск. Приходится увеличивать лимит в несколько раз. И, как следствие, приходится на сервера в несколько раз больше памяти накидывать. Причем кэш сохраняется и на сервере и в клиентской сессии, т.е. апгрейдить приходится и AOS и клиентские сервера. Но это еще не все. Сервера между собой синхронизируют кэш по какому-то таинственному протоколу, из-за которого система может неожиданно начать подтормаживать и данные могут оказаться неактуальными.
А почему бы просто везде не заменить EntireTable Cache на FoundAndEmpty ? Не могу ни одного негативного последствия такого изменения придумать.
Я тоже время от времени на грабли с Entire Table cache с несколькими AOSами налетал, но я их там чинил тупо отрубая этот способ кэширования как таковой...
И по моему это малость оффтопик здесь. Все-таки тема про кэширование объектов, а не таблиц...
Старый 08.06.2017, 09:54   #39  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от macklakov Посмотреть сообщение
Не совсем. Идея в следующем. Часто AOS разделяют по функциям. Этот MRP считает, а этот всякие системные jobs гоняет, на этом сидят пользователи, а этот для интеграции. Делается это для того, чтобы снизить вероятность конкуренции за ресурсы. И пользователи с разными ролями обычно налегат на разные ресурсы. Поэтому хотелось бы управление кэшированием не из кода, а из настроек. Чтобы, собрав статистику, можно было перенастроить кэширование на конкретом AOS. Или для конекретного подмножества пользователей.
Почему это важно? Потому что, согласно опыту последних 6-ти лет, продуктовая команда имеет очень смутное представление о том, что нужно клиентам. И эта размытость образа происходит, опять таки, из-за средней температуры по больнице. Клиенты разные, им нужно разное. Причем хотелки имет свойство изменяться со временем. Разработчик просто не в состоянии определить как лучше будет откэшировать, т.к. он может лишь догадываться о том, какую топологию предпочтет клиент.
А вот админ, сопровождающий конкретного клиента, обычно точно знает где у него узкое место. Где и что надо откэшировать чтобы разгрузить конкретно вот этот канал и эти таблицы в базе данных.
Во первых - более или менее кэширутся только настроечные и справочные таблицы. У всех более или менее крупных транзакционных таблиц (типа того же MRP), кэширование либо вообще выключено, либо установлено в NotInTTs (То есть - кэшироваться оно будет не с сервера, а только при просмотре клиентов).
Во вторых - ты не поверишь, но обычный LFU-алгоритм позволяет избавиться от табличных кэшей, которые не особо нужны на данном сервере. То есть - если у тебя нечаянно на MRPшном AOS закэшировались основные средства, то алгоритм LFU бодренько вытеснит эту информацию из памяти и заместит данными из групп покрытия например (в общем - той информацией которая часто и регулярно используется именно на данном конкретном AOS). Я просто не вижу чего тут может дать преднастройка того, какие именно таблицы кэшировать. Мелкие таблицы и так закэшируются, а крупные - скорее всего всерьез кэшировать просто нельзя, потому что они могут с множества разных AOS обновляться в рабочем режиме.

Последний раз редактировалось fed; 08.06.2017 в 10:09.
Старый 08.06.2017, 20:39   #40  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
что можно было бы сделать к кэшем в аксапте, чтобы упростить жизнь всех разработчиков, администраторов и пользователей? чтобы снизить вероятность ошибок, связанных с кэшированием?
автоматизировать "контроль версий\типов" для любых "сохраненных" данных

запилить "деструктор" или как уже отмечалось выше хотя бы "анализатор" текущих "ресурсов". По ситуациям "сервер\клиент отобрал все и упал.. обратно не отдает" нет "инструментов поддержки", а для десятков AOS и сотен юзверей хотелось бы такой инструмент..

Освобожденные километрочасы типовых историй про "удалить кеши", рестартовать аос\сервер\вселенную и хоть как-то выявить сессии\объекты AOT "пожиратели ресурсов" хочется направить на что-то более полезное для счастливого обладателя лицензий
Теги
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, время: 09:07.