06.06.2017, 21:24 | #21 |
Участник
|
Цитата:
видно число элементов в кэше, но не видно используемую память. но в ходе разбирательств выяснилось много чего другого забавного. я сформулировал выше. в конкретном случае разберемся. и с кэшами, и с памятью. мне больше было бы интересно рассуждения на тему: как правильно варить? и что люди делали в кэшами? в качестве побочного результата хочется получить знания о виндовых счетчиках и как публиковать данные из аксапты в них. Как добавить виндовый счетчик (performance monitor), который отображал бы администратору происходящее внутри аксапты? (кстати, Макс, видел твою внутреннюю страничку про регистрацию счетчиков и мониторинг. для всех бы такую. чтобы не зависело от внутренних служб) также было бы круто научиться перехватывать события закрытого класса SysGlobalObjectCache. ))) |
|
07.06.2017, 11:10 | #22 |
Участник
|
Цитата:
Причем проблема не только в указанных вами кешах (SysGlobalCache, etc), а вообще в том, что ядро много чего кеширует и потом не синхронизирует значения в кеше с актуальными данными. Возможно это будет оффтопик, но может быть составим реестр известных проблем и таблеток от них ? Навскидку 1. Проблема с добавлением по живой новых полей в табличку Ax 2012 R2. Поле "не извлечено" 2. Проблема при создании новых классов Extension Framework and SysGlobalCache issue Вообще, похоже в 2012-й решили жестко все кешировать, вроде бы это и неплохо, но постоянно лезут проблемы с неактуальностью значений в кешах (не только Sysglobalcache) 3. А вот тут кеша нет, а надо бы сделать кеширование. Долгий запуск AX2012 R2 |
|
07.06.2017, 12:07 | #23 |
Участник
|
Кеширование курсов валют, кеширование цен, кеширование календарей - это из того, с чем пользователи сталкиваются.
__________________
Ivanhoe as is.. |
|
07.06.2017, 12:24 | #24 |
Участник
|
Последний раз редактировалось Logger; 07.06.2017 в 13:54. |
|
07.06.2017, 12:32 | #25 |
Участник
|
а давайте про реестр в другой ветке?
реестр создавался - http://stopbugs.ru. основная проблема как и с кэшами - информация очень быстро протухает. кто-то должен следить за актуальностью багов и таблеток. на общественных началах эту работу никто не готов тащить. да... кэширование цен - это вручную используемый SysGlobalCache + кэширование на уровне таблиц EntireTable... адская смесь. |
|
07.06.2017, 13:24 | #26 |
Moderator
|
Пожалуй отмечусь: На мой взгляд - единственная реальная проблема на внедрениях - это протухание кэша. Проблем с памятью и гипотетическим низким hit/miss ratio я не видел.
На мой взгляд, шагом вперед стала бы поддержка cache scope как некого прикладного объекта в AOD. И чтобы можно было бы где-то на уровне таблицы указывать, какие скопы надо очищать при изменении таблицы. Во всех случаях это не спасло бы, но для типичных ситуаций малость облегчило бы кодинг. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Logger (3), NetBus (2). |
07.06.2017, 13:35 | #27 |
Участник
|
Будем справедливы.
Как отметил Vadik и dech, есть SysGlobalObjectCache. Там есть механизм вытеснения. Но вытесняются только те значения, которые не влезают в отведенные количественные лимиты (число записей, объем памяти) Другое дело, что в текущем коде SysGlobalObjectCache и SysGlobalCache используются поровну. Цитата:
Сообщение от dech
Особое внимание прошу обратить на последний абзац: Best Practices
https://blogs.msdn.microsoft.com/axp...-implications/ |
|
07.06.2017, 14:39 | #28 |
Участник
|
Цитата:
Это был бы неплохой вариант эквивалентный рестарту аоса, но без убиения пользовательских сессий. Пользователь только заметил бы некоторое замедление работы (пока затягиваются заново значения в кеши). Это было бы нужно прежде всего при работе 24/7 когда нужно подправить какие-то настройки или накатить код но не останавливая весь комплекс. 2009-я аксапта это позволяла. В 2012-й похоже от такого отказались, а жаль. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
07.06.2017, 14:41 | #29 |
Участник
|
Мне вот интересно, если SysGlobalCache используется в рамках сессии, а SysGlobalObjectCache - в рамках AOS-а, то как жить дальше, когда у меня имеется 2 AOS-а и мне нужно закэшировать что-то прям ваще глобальное?
__________________
// no comments |
|
07.06.2017, 17:30 | #30 |
Участник
|
SysLastValue
|
|
07.06.2017, 18:41 | #31 |
Участник
|
Цитата:
Собственно, глобальная переменная потому и "глобальная" что никак и ни с чем не связана. Как следствие, сделать какой-либо вывод о том, что данная переменная уже никак и нигде не используется - невозможно. Нет никаких критериев, по которым этом можно было бы сделать. Всегда есть риск, что будет удалено что-то нужное... Используемое "вот прям счаз" В теории, сам разработчик должен указать "область видимости". Т.е. событие, по наступлении которого глобальную переменную можно удалить. Ну, там, некий процесс завершился или время вышло. Но! Раз такая переменная вообще была создана, значит разработчик как раз и не в состоянии проконтролировать эту самую "область видимости" Единственный выход - не создавать глобальный кеш. Но это уже невозможно. Джина выпустили из бутылки
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
07.06.2017, 18:59 | #32 |
Участник
|
Цитата:
если обнулить ссылку в глобальном кэше, то сам объект не удалится, у него просто уменьшится счетчик ссылок. те, объекты, у которых счетчик ссылок = 0, попадут в следующую итерацию сборщика мусора. там в процессе сборки мусора и будут удалены. |
|
07.06.2017, 21:34 | #33 |
Участник
|
Ссылка возникает в момент обращения. Но сама идея глобальных объектов в том и заключается, что обращение будет отложено.
Ну, например, процесс 1 сформировал глобальный объект и был завершен. А потом, спустя некоторое время, был запущено процесс 2, который как раз и обратился за данными глобального объекта. Такое "отложенное" обращение счетчик ссылок не поймает. Просто нет ссылок на момент вычисления. Причем не факт, что это просто кеш. Это может быть и промежуточные расчеты в какой-то сложной конфигурации классов
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
08.06.2017, 04:00 | #34 |
NavAx
|
У нас чуть меньше 50 AOS и 1500 пользователей через Citrix. Версия 2012 R2. Мы ловим все возможные проблемы с кэшем. Самые большие проблемы с табличным кэшированием. Таблица в лимит по памяти не умещатеся, свопится на диск. Приходится увеличивать лимит в несколько раз. И, как следствие, приходится на сервера в несколько раз больше памяти накидывать. Причем кэш сохраняется и на сервере и в клиентской сессии, т.е. апгрейдить приходится и AOS и клиентские сервера. Но это еще не все. Сервера между собой синхронизируют кэш по какому-то таинственному протоколу, из-за которого система может неожиданно начать подтормаживать и данные могут оказаться неактуальными.
__________________
Isn't it nice when things just work? |
|
08.06.2017, 05:25 | #35 |
NavAx
|
музейный экспонат
Цитата:
Я могу предположить что цель это снизить количество обращений клиент-сервер. Тогда: Цитата:
Почему в разрезе AOS? Потому что разные сервера обычно занимаются разными задачами. Одному нужна хорошо откэшированная ГК, а другому хорошо откэшированный склад. А не "средняя температура по больнице" как сейчас. Еще не плохо бы эти настройки сделать экспортируемыми/импортируемыми. Тогда можно будет поднимать "событийные" настройки кэширования. К примеру, на закрытие склада или финансового периода, рассчеты сводного планирования и т.д. Еще важный вопрос, это синхронизация кэша между серверами. Это отнюдь не тривиальная задача. И если у SQL админа есть куча инструментов по отлову блокировок и избавления от них, то в случае множественных AOS-ов, остается лишь скакать с бубном и приносить девственников в жертву, в попытке умилостивить сереверных духов.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: mazzy (2), NetBus (2). |
08.06.2017, 08:59 | #36 |
Участник
|
другими словами, с точностью до сессии?
но тогда получается внутриаксаптовский инструмент типа онлайнпользователей. внешний инструмент с точностью до компа. или не? |
|
08.06.2017, 09:45 | #37 |
NavAx
|
Цитата:
Почему это важно? Потому что, согласно опыту последних 6-ти лет, продуктовая команда имеет очень смутное представление о том, что нужно клиентам. И эта размытость образа происходит, опять таки, из-за средней температуры по больнице. Клиенты разные, им нужно разное. Причем хотелки имет свойство изменяться со временем. Разработчик просто не в состоянии определить как лучше будет откэшировать, т.к. он может лишь догадываться о том, какую топологию предпочтет клиент. А вот админ, сопровождающий конкретного клиента, обычно точно знает где у него узкое место. Где и что надо откэшировать чтобы разгрузить конкретно вот этот канал и эти таблицы в базе данных.
__________________
Isn't it nice when things just work? |
|
08.06.2017, 09:45 | #38 |
Moderator
|
Цитата:
Сообщение от macklakov
У нас чуть меньше 50 AOS и 1500 пользователей через Citrix. Версия 2012 R2. Мы ловим все возможные проблемы с кэшем. Самые большие проблемы с табличным кэшированием. Таблица в лимит по памяти не умещатеся, свопится на диск. Приходится увеличивать лимит в несколько раз. И, как следствие, приходится на сервера в несколько раз больше памяти накидывать. Причем кэш сохраняется и на сервере и в клиентской сессии, т.е. апгрейдить приходится и AOS и клиентские сервера. Но это еще не все. Сервера между собой синхронизируют кэш по какому-то таинственному протоколу, из-за которого система может неожиданно начать подтормаживать и данные могут оказаться неактуальными.
Я тоже время от времени на грабли с Entire Table cache с несколькими AOSами налетал, но я их там чинил тупо отрубая этот способ кэширования как таковой... И по моему это малость оффтопик здесь. Все-таки тема про кэширование объектов, а не таблиц... |
|
08.06.2017, 09:54 | #39 |
Moderator
|
Цитата:
Сообщение от macklakov
Не совсем. Идея в следующем. Часто AOS разделяют по функциям. Этот MRP считает, а этот всякие системные jobs гоняет, на этом сидят пользователи, а этот для интеграции. Делается это для того, чтобы снизить вероятность конкуренции за ресурсы. И пользователи с разными ролями обычно налегат на разные ресурсы. Поэтому хотелось бы управление кэшированием не из кода, а из настроек. Чтобы, собрав статистику, можно было перенастроить кэширование на конкретом AOS. Или для конекретного подмножества пользователей.
Почему это важно? Потому что, согласно опыту последних 6-ти лет, продуктовая команда имеет очень смутное представление о том, что нужно клиентам. И эта размытость образа происходит, опять таки, из-за средней температуры по больнице. Клиенты разные, им нужно разное. Причем хотелки имет свойство изменяться со временем. Разработчик просто не в состоянии определить как лучше будет откэшировать, т.к. он может лишь догадываться о том, какую топологию предпочтет клиент. А вот админ, сопровождающий конкретного клиента, обычно точно знает где у него узкое место. Где и что надо откэшировать чтобы разгрузить конкретно вот этот канал и эти таблицы в базе данных. Во вторых - ты не поверишь, но обычный LFU-алгоритм позволяет избавиться от табличных кэшей, которые не особо нужны на данном сервере. То есть - если у тебя нечаянно на MRPшном AOS закэшировались основные средства, то алгоритм LFU бодренько вытеснит эту информацию из памяти и заместит данными из групп покрытия например (в общем - той информацией которая часто и регулярно используется именно на данном конкретном AOS). Я просто не вижу чего тут может дать преднастройка того, какие именно таблицы кэшировать. Мелкие таблицы и так закэшируются, а крупные - скорее всего всерьез кэшировать просто нельзя, потому что они могут с множества разных AOS обновляться в рабочем режиме. Последний раз редактировалось fed; 08.06.2017 в 10:09. |
|
08.06.2017, 20:39 | #40 |
Участник
|
Цитата:
запилить "деструктор" или как уже отмечалось выше хотя бы "анализатор" текущих "ресурсов". По ситуациям "сервер\клиент отобрал все и упал.. обратно не отдает" нет "инструментов поддержки", а для десятков AOS и сотен юзверей хотелось бы такой инструмент.. Освобожденные километрочасы типовых историй про "удалить кеши", рестартовать аос\сервер\вселенную и хоть как-то выявить сессии\объекты AOT "пожиратели ресурсов" хочется направить на что-то более полезное для счастливого обладателя лицензий |
|
Теги |
sysglobalcache, кэширование |
|
|