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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.06.2017, 13:24   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Пожалуй отмечусь: На мой взгляд - единственная реальная проблема на внедрениях - это протухание кэша. Проблем с памятью и гипотетическим низким hit/miss ratio я не видел.
На мой взгляд, шагом вперед стала бы поддержка cache scope как некого прикладного объекта в AOD. И чтобы можно было бы где-то на уровне таблицы указывать, какие скопы надо очищать при изменении таблицы. Во всех случаях это не спасло бы, но для типичных ситуаций малость облегчило бы кодинг.
За это сообщение автора поблагодарили: mazzy (2), Logger (3), NetBus (2).
Старый 07.06.2017, 14:39   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
Во всех случаях это не спасло бы, но для типичных ситуаций малость облегчило бы кодинг.
Интересно, а если предусмотреть вариант Global flush - т.е. очистка всех кешей - которые есть как в kernel так и определенных из X++ кода. - Будут от этого какие-нибудь риски или нет ?

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

Это было бы нужно прежде всего при работе 24/7 когда нужно подправить какие-то настройки или накатить код но не останавливая весь комплекс. 2009-я аксапта это позволяла. В 2012-й похоже от такого отказались, а жаль.
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.06.2017, 18:41   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Интересно, а если предусмотреть вариант Global flush - т.е. очистка всех кешей - которые есть как в kernel так и определенных из X++ кода. - Будут от этого какие-нибудь риски или нет ?
Конечно. Если будет обнулен кеш с результатами промежуточных расчетов в процессе этого самого расчета.

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

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

Единственный выход - не создавать глобальный кеш. Но это уже невозможно. Джина выпустили из бутылки
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.06.2017, 18:59   #4  
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   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ну, почему же? Это ж java. там счетчики ссылок есть.
Ссылка возникает в момент обращения. Но сама идея глобальных объектов в том и заключается, что обращение будет отложено.

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

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

Причем не факт, что это просто кеш. Это может быть и промежуточные расчеты в какой-то сложной конфигурации классов
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.06.2017, 04:00   #6  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 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, 09:45   #7  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от macklakov Посмотреть сообщение
У нас чуть меньше 50 AOS и 1500 пользователей через Citrix. Версия 2012 R2. Мы ловим все возможные проблемы с кэшем. Самые большие проблемы с табличным кэшированием. Таблица в лимит по памяти не умещатеся, свопится на диск. Приходится увеличивать лимит в несколько раз. И, как следствие, приходится на сервера в несколько раз больше памяти накидывать. Причем кэш сохраняется и на сервере и в клиентской сессии, т.е. апгрейдить приходится и AOS и клиентские сервера. Но это еще не все. Сервера между собой синхронизируют кэш по какому-то таинственному протоколу, из-за которого система может неожиданно начать подтормаживать и данные могут оказаться неактуальными.
А почему бы просто везде не заменить EntireTable Cache на FoundAndEmpty ? Не могу ни одного негативного последствия такого изменения придумать.
Я тоже время от времени на грабли с Entire Table cache с несколькими AOSами налетал, но я их там чинил тупо отрубая этот способ кэширования как таковой...
И по моему это малость оффтопик здесь. Все-таки тема про кэширование объектов, а не таблиц...
Старый 09.06.2017, 02:59   #8  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от fed Посмотреть сообщение
А почему бы просто везде не заменить EntireTable Cache на FoundAndEmpty ? Не могу ни одного негативного последствия такого изменения придумать.
Я тоже время от времени на грабли с Entire Table cache с несколькими AOSами налетал, но я их там чинил тупо отрубая этот способ кэширования как таковой...
И по моему это малость оффтопик здесь. Все-таки тема про кэширование объектов, а не таблиц...
Ну, в принципе, EntireTable кэширование для параметров может иметь смысл. Но, значительная часть из таблиц которые хотелось бы закэшировать, большие. Нужно увеличивать лимит памяти, чтобы влезли. А этим лимитом тут же пользуются таблицы, которые на этом сервере не очень-то и нужны в кэше. Т.е. для того, чтобы закэшировать целиком несколько таблиц, общим объемом в 100 Мб, памяти приходится накидывать десятками Гб. Доработка напильником, до какой-то степени помагает, но опять таки, действует "средняя температура по больнице". Т.е. все через код, то настройки кэширования одинаковые для всех серверов. И память все равно пожирается ненужными кэшами.
В принципе, согласен что оффтоп.
__________________
Isn't it nice when things just work?
Теги
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:39.