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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2007, 17:59   #21  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от glibs Посмотреть сообщение
Хм...

Желающие могут ознакомиться в приложении.

С удовольствием послушаю критику.
Здорово.
Риспект.

глянул в код - непонятно, зачем делать 100 сессий. Если 100 пользователей сидит - получится 10 тыс. записей в таблице.

Да и аос будет нагружать, что исказит картину.
Может сделать 1-2 считывания через некоторый промежуток времени.

Например поставит 2 цикла а не 100 и в теле цикла поставить sleep(1000)
Старый 04.11.2007, 00:38   #22  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Я уже не помню, почему так сделал .

Наверное, разгадка вот в этом.
Цитата:
Сообщение от glibs
...
что-то аналигичное журналу PerfMon'а. Я по такому принципу делал.
...
По-моему, я как раз в то время баловался с этой цацкой, и мне понравилось.

Я пока не пользовался этим, так что в каком его направлении лучше развивать пока не думал.
__________________
С уважением,
glibs®
Старый 15.11.2007, 12:01   #23  
kBace4ka is offline
kBace4ka
Участник
 
8 / 10 (1) +
Регистрация: 16.07.2007
Адрес: Челябинск
Было бы неплохо добавить отображение блокировок Оркала.
Что бы видеть какой пользователь блокирует работу остальных.
Старый 15.11.2007, 12:12   #24  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kBace4ka Посмотреть сообщение
Было бы неплохо добавить отображение блокировок Оркала.
Что бы видеть какой пользователь блокирует работу остальных.
А чем не устраивает
Главное меню \ Администрирование \ Запросы \ База данных \ Блокировки пользователей базы данных
__________________
полезное на axForum, github, vk, coub.
Старый 05.04.2016, 15:08   #25  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А как этот вопрос решается в новых версиях Аксапты ?
В 2009-й указанный способ не работает.
(Вопрос о том как определить какая сессия на аосе сколько процессорного времени отъела)

Последний раз редактировалось Logger; 05.04.2016 в 15:48.
Старый 05.04.2016, 17:16   #26  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
В AX 2012 была добавлена возможность прописывать информацию о пользователе и его сессии в Аксапте в контекст SQL-соединения, за счет чего стало возможно со стороны СУБД понимать, какое соединение к кому относится, см. Troubleshooting database performance [AX 2012]. Заполнение контекста чуть-чуть снижает производительность, но это с лихвой компенсируется удобством мониторинга. После перезапуска АОСа с новой настройкой указанную информацию о сессии, доступную через sys.dm_exec_sessions.context_info, можно разбирать, к примеру, так:
PHP код:
WITH DM_EXEC_SESSION_PARSE (session_idax_userax_s)
AS (
SELECT
    session_id
,
    
SUBSTRING(CAST(ss.CONTEXT_INFO as varchar(128)), 2PATINDEX('% %',
        
LTRIM(CAST(ss.CONTEXT_INFO as varchar(128))))) as ax_user,
    
CAST(SUBSTRING(LTRIM(CAST(ss.CONTEXT_INFO as varchar(128))),
        
PATINDEX('% %'LTRIM(CAST(ss.CONTEXT_INFO as varchar(128)))) + 1,
        
PATINDEX('% %'SUBSTRING(LTRIM(CAST(ss.CONTEXT_INFO as varchar(128))),
        
PATINDEX('% %'LTRIM(CAST(ss.CONTEXT_INFO as varchar(128)))) + 1,
        
LEN(CAST(ss.CONTEXT_INFO as varchar(128))))) - 1) as int) as ax_s
FROM    sys
.dm_exec_sessions ss
WHERE    program_name in 
('Microsoft Dynamics AX')
    AND    
CAST(CONTEXT_INFO as varchar(128)) > ''
),
DM_EXEC_SESSION_FILTER (session_iddatabase_id, [status], threads)
AS (
    
SELECT
        s
.session_id
       
,s.database_id
       
,s.[status]
       ,
count(*) as threads
    FROM    sys
.dm_exec_sessions s
    JOIN    sys
.dm_exec_requests r
        ON    
(s.session_id r.session_id AND r.sql_handle IS NOT NULL AND r.plan_handle IS NOT NULL)
        OR    (
s.session_id r.blocking_session_id)
    
JOIN    sys.sysprocesses    sp
        ON    s
.session_id sp.spid
    GROUP BY s
.session_ids.database_ids.status
)
SELECT
     ss
.session_id AS [sid]
    ,
COALESCE(r.blocking_session_id0) AS [blck]
    ,
ss.threads
    
,COALESCE(ss_ctx.ax_user'') AS [ax_user]
    ,
COALESCE(ss_ctx.ax_s'') AS [ax_s]
    ,
COALESCE(r.wait_time0) AS [wait_time]
    ,
COALESCE(r.wait_type'') AS [wait_type]
    ,
COALESCE(r.command'') AS [command]
    ,
ss.status as [status]
    ,
COALESCE(DB_NAME(ss.database_id), '') as [db_name]
    ,CASE 
WHEN r.plan_handle IS NOT NULL THEN COALESCE((SELECT TOP 1 query_plan    FROM sys.dm_exec_query_plan(r.plan_handle)), '') ELSE '' END AS [query_plan]
    ,CASE 
WHEN r.sql_handle  IS NOT NULL THEN COALESCE((SELECT TOP 1 text        FROM sys.dm_exec_sql_text(r.sql_handle)), '') ELSE '' END AS [query]
FROM        DM_EXEC_SESSION_FILTER    ss
LEFT JOIN    sys
.sysprocesses        sp
    ON    ss
.session_id sp.spid
    
AND sp.loginame <> ''
LEFT JOIN    sys.dm_exec_requests    r
    ON    ss
.session_id r.session_id
LEFT JOIN    DM_EXEC_SESSION_PARSE    ss_ctx
    ON    ss_ctx
.session_id ss.session_id 
Код:
sid  blck  threads  ax_user  ax_s  wait_time  wait_type  command  status   db_name  query_plan                           query
---- ----- -------- -------- ----- ---------- ---------- -------- -------- -------- ------------------------------------ ----------
223  0     1        userId   123   0                     SELECT   running  AX60_DB  <ShowPlanXML xmlns="http://schema... SELECT ...
За это сообщение автора поблагодарили: mazzy (2), Dron AKA andy (1), Vadik (5), trud (3), Logger (5).
Старый 05.04.2016, 17:42   #27  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Собственно, это что касается связи пользователей и сессий СУБД
А по поводу загрузки пользователями процов на АОСе - никак. Потому что после 4.0, где перевели обработку бизнес-логики на рельсы RPC, на АОСе больше нет выделенного потока, закрепленного за каждой пользовательской сессией, вместо этого есть пул рабочих потоков (их в разы меньше, чем пользовательских сессий), где очередной запрос от пользовательской сессии обрабатывается первым попавшимся свободным рабочим потоком, который берется из пула, потом он кладется обратно в пул, а через мгновение уже обрабатывает запрос от другой пользовательской сессии. Чтобы АОС умел считать, какой пользователь насколько грузит его процессоры, он должен был бы вести некие счетчики производительности в разрезе пользовательских сессий.

Последний раз редактировалось gl00mie; 05.04.2016 в 17:56.
За это сообщение автора поблагодарили: Logger (7).
Старый 05.04.2016, 22:27   #28  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от gl00mie Посмотреть сообщение
на АОСе больше нет выделенного потока, закрепленного за каждой пользовательской сессией, вместо этого есть пул рабочих потоков (их в разы меньше, чем пользовательских сессий), где очередной запрос от пользовательской сессии обрабатывается первым попавшимся свободным рабочим потоком, который берется из пула, потом он кладется обратно в пул, а через мгновение уже обрабатывает запрос от другой пользовательской сессии.
Мммм. Если я правильно понимаю такое перескакивание может быть в случае когда от клиента идут запросы на аос и нет транзакции. А если начата транзакция или запущена долгая обработка на аосе (например пакет крутится) то тоже не будет соответствия сессии и потока ? Это же неудобно. Контекст надо как-то передавать между потоками. Накладные расходы опять же вырастают.
А где про это можно почитать ?

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Чтобы АОС умел считать, какой пользователь насколько грузит его процессоры, он должен был бы вести некие счетчики производительности в разрезе пользовательских сессий.
Дык, вот и непонятно зачем этого не сделали. Тем более что, предыдущие версии аксапты такое позволяли делать (см. класс AOSSessionInfo)
Старый 08.04.2016, 07:09   #29  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если нельзя, но очень хочется, то можно.

Поковырялся и все же сделал вариант мониторинга который частично решает поставленную задачу.
Исходим из того, что информация о загрузке аоса по сессиям интересует только тогда когда они создают существенную нагрузку, а это как правило:
1. Пакетные обработки.
2. Долгие серверные обработки, запущенные обычным пользователем.
3. Долгие серверные обработки инициированные com и .Net бизнес коннекторами.

Во всех этих случаях, на всем протяжении времени пока выполняется обработка должно соблюдаться соответствие номера пользовательской сессии и номера обслуживающего потока в рамках виндового процесса АОСа. А значит мы можем посчитать его вклад в нагрузку создаваемую аосом в целом. А это нам и надо.

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

Проект очень сырой, рассматриваю его как прототип. Возможны разные баги. Отображает нагрузку только на текущем аосе. Т.е. для просмотра процентов загрузки аоса сессиями, надо именно на интересующем аосе запускать форму.
Написан для 2009-й версии. Хотя возможно и для 2012-й сработает. я не проверял.
Вложения
Тип файла: zip ProcAOSCounter.zip (33.8 Кб, 176 просмотров)

Последний раз редактировалось Logger; 08.04.2016 в 07:17.
За это сообщение автора поблагодарили: Pustik (11).
Старый 08.04.2016, 08:38   #30  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Спасибо.
У меня при компиляции не хватает некоторых Ваших классов :
1) Session, Методы: Session::GRD_getAOSPortCached(), Session::GRD_getServerID()
Подойдет ли замена на Session::getAOSPort и return new xSession().serverId() соответственно?
2) SysTreeNode, Метод: SysTreeNode::GRD_refreshAll4Com();
Подойдет ли замена на SysTreeNode::refreshAll ?
3) Box, Метод: Box::yesNo_Net - но это вроде бы не критично
и нет таблиц :
GRD_BatchParameters, Метод : GRD_BatchParameters::find().MainBatchOperator
GRD_catch, Метод : GRD_catch::insertByCommon(.....
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 08.04.2016 в 08:49.
Старый 08.04.2016, 08:49   #31  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Там лишние методы попались. Можно их закомментировать. Нужно лишь помеченное номером проекта R100701 и все. Замены тоже должны подойти кроме SysTreeNode::GRD_refreshAll4Com().
Box::yesNo_Net - заменить на Box::yesNo

При работе выглядит примерно так для пакетных обработчиков
Нажмите на изображение для увеличения
Название: aocProc2.png
Просмотров: 558
Размер:	34.7 Кб
ID:	9565

Перевыложил проект.
Вложения
Тип файла: zip ProcAOSCounter2.zip (26.7 Кб, 181 просмотров)

Последний раз редактировалось Logger; 08.04.2016 в 10:40.
За это сообщение автора поблагодарили: gl00mie (5).
Старый 14.04.2016, 13:27   #32  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Создать таблицу, в которую писать имя коллера (форма, отчёт), пользователя, дату и время. Подвязать к событиям классов-родителей, например:
\Classes\SysSetupFormRun\run;
\Classes\SysSetupFormRun\closeOk;
\Classes\SysSetupFormRun\close;
\Classes\RunBase\run.
Старый 08.07.2020, 17:10   #33  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от Logger Посмотреть сообщение
Перевыложил проект.
Столкнулись с такой проблемой - периодически какой-то пользователь(а может и пакетное задание) приводит к высокой загрузке АОСа 2009, сжирает всю память на аосе(16ГБ) и начинает создавать кучу временных таблиц на диске.
АОС при этом не падает, но начинает жутко тормозить. на SQL загрузки тоже особо никакой нет.
Стоит задача определить что это за пользователь(ну или что за пакет).
Я так понимаю приложенный проект как раз нацелен на это. Поскольку тема старая - может у кого нибудь есть свежие идеи(ну или обновления проекта) как найти виновника
Выглядит это приметрно так (версия 2009)
Нажмите на изображение для увеличения
Название: Load100.png
Просмотров: 223
Размер:	56.5 Кб
ID:	12890
Старый 09.07.2020, 13:57   #34  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от trud Посмотреть сообщение
Я так понимаю приложенный проект как раз нацелен на это. Поскольку тема старая - может у кого нибудь есть свежие идеи(ну или обновления проекта) как найти виновника
Мой пример был нацелен на то чтобы найти того, кто сожрал процессорное время. В части поиска виновника потребления памяти, мне кажется, он не поможет.

Есть другие способы, попозже опишу. Но гарантированного результата не дают.
Старый 09.07.2020, 14:35   #35  
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
Цитата:
Сообщение от trud Посмотреть сообщение
Столкнулись с такой проблемой - периодически какой-то пользователь(а может и пакетное задание) приводит к высокой загрузке АОСа 2009, сжирает всю память на аосе(16ГБ) и начинает создавать кучу временных таблиц на диске.
АОС при этом не падает, но начинает жутко тормозить. на SQL загрузки тоже особо никакой нет.
Стоит задача определить что это за пользователь(ну или что за пакет).
Я так понимаю приложенный проект как раз нацелен на это. Поскольку тема старая - может у кого нибудь есть свежие идеи(ну или обновления проекта) как найти виновника
Выглядит это приметрно так (версия 2009)
Вложение 12890
Я что-то такое видел, когда кто-то врубил EntireTableCache по часто обновляемой таблице. На SQL Server картина более или менее была (в целом - даже по таблице из 100000 записей выполнить select * from table не тяжело), но на AOSах творилось как-раз то, что у тебя описано. Один из AOS в кластере что-то в таблице обновляет, а другие видят какой-то семафор и бросаются таблицу читать с SQL и писать в временный файл. Попробуй посмотреть в кэше SQL Server, нету ли там каких-то загадочных (хотя и не очень затратных) полных селектов по таблицам, которые нету смысла целиком читать...
Старый 09.07.2020, 14:39   #36  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
Я что-то такое видел, когда кто-то врубил EntireTableCache по часто обновляемой таблице.
И оперативная память тоже поглощалась ?
А это-то почему ? Не должна бы.
Старый 09.07.2020, 15:11   #37  
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
Цитата:
Сообщение от Logger Посмотреть сообщение
И оперативная память тоже поглощалась ?
А это-то почему ? Не должна бы.
Ну вообще в моем случае, AOS в памяти рос, но не до таких размеров. Есть подозрение что там кто-то эдак на десяточек-другой популярных таблиц врубил EntireTableCache, и вся память отъедается на постоянно создаваемые курсоры.
Хотя - это и что-то другое может быть. Но у меня картина довольно однозначная была на AOS - при довольно таки плевых с прикладной точки зрения операциях, загрузка CPU выростала до 40-60 процентов при 5-7 параллельно работающих пользователях.
За это сообщение автора поблагодарили: trud (20).
Старый 09.07.2020, 19:09   #38  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от fed Посмотреть сообщение
Ну вообще в моем случае, AOS в памяти рос, но не до таких размеров. Есть подозрение что там кто-то эдак на десяточек-другой популярных таблиц врубил EntireTableCache, и вся память отъедается на постоянно создаваемые курсоры.
Хотя - это и что-то другое может быть. Но у меня картина довольно однозначная была на AOS - при довольно таки плевых с прикладной точки зрения операциях, загрузка CPU выростала до 40-60 процентов при 5-7 параллельно работающих пользователях.
Вспомним историю:
формальные показатели включения cacheLookup EntireTable
Старый 10.07.2020, 02:44   #39  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от fed Посмотреть сообщение
Ну вообще в моем случае, AOS в памяти рос, но не до таких размеров. Есть подозрение что там кто-то эдак на десяточек-другой популярных таблиц врубил EntireTableCache, и вся память отъедается на постоянно создаваемые курсоры.
Бинго .
Название: CachedTable.png
Просмотров: 1040

Размер: 8.4 Кб
Спасибо, я как-то упустил этот момент. Но хочется отменить что современные сервера стали быстрее, тут система как-то дожила до 1млн записей.
Джоб для проверки(https://github.com/TrudAX/TRUDScript...re-table-cache ,проверьте свои системы

Последний раз редактировалось trud; 10.07.2020 в 02:46.
За это сообщение автора поблагодарили: Ace of Database (2), Raven Melancholic (2), S.Kuskov (2).
Старый 10.07.2020, 08:01   #40  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от trud Посмотреть сообщение
Бинго .
Ух ты, а что за бизнес-ситуация при которой в InterCompanyEndpointActionPolicyTransfer такое количество записей?
Теги
perfmon, performance, аос, документация, загрузка процессора, мониторинг, полезное, производительность, процессор, счетчики производительности

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Журнал работы пользователей (логи)? Anais DAX: Администрирование 7 26.08.2009 09:15
Ошибка: Сессия работы на сервере AOS прервана... Atani DAX: Программирование 6 09.08.2007 09:28
Использование профилировщика и толкование результатов его работы belugin DAX: Программирование 3 22.11.2005 16:56
Настройка прав доступа для работы с журналами платежей Pismarkina DAX: Администрирование 3 27.05.2005 09:31
Организация работы программистов Андре DAX: Прочие вопросы 34 29.05.2002 13:16

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:02.