Оптимизация приложений

Существует несколько причин, по которым Вы можете прийти к выводу о необходимости оптимизации разработанного приложения. Одна из них это значительное увеличение одновременно-работающих пользователей, а другая – неудовлетворительное время выполнения операций. Первое, что приходит в голову – может изменить настройки и все будет работать как надо, но не так много настроек в Cache’, чтобы изначально настроить сервер совсем не оптимальным способом. Вторая мысль – увеличить мощность сервера, но часто мы имеем желание увеличить производительность приложения на порядок, и замена сервера нам здесь скорее всего не поможет. Остается один выход – оптимизация приложений.
Для того, чтобы понять чем занимается приложение вы можете использовать ^%SYS.MONLBL, но главное – как оценить результат оптимизации. В этом меньше всего Вам поможет секундомер, потому что время выполнения зависит от текущей загрузки процессора, а главное от эффективности работы с буфером. Т.е. если буфер данных большой, и никакие процессы не вытесняют Ваши данные, то результат – прекрасный, но в жизни – объем данных «безграничен», размер буфера всегда недостаточен, и много конкурентных процессов выкидывают Ваши данные из буфера.
Выход из ситуации один – оценивать счетчики выполнения команд и обращения к данным. Реально в Cache’ мы имеем счетчик выполненных строк и счетчик обращения к данным. Можно конечно наблюдать за счетчиками из портала управления, но удобнее фиксировать показатели программным способом.
Вопрос 1 – где хранить показатели
Удобно хранить показатели в общем журнале, при этом фиксировать название измерения, время, текущие временные затраты и 2 изменения счетчиков. Таким образом, по результатам оптимизации мы можем сделать вывод о N-кратном увеличении производительности нашего приложения – Congratulations!
Вопрос 2 – как вызывать
Самый удобный способ – вставить вызовы в «главную» CSP-страницу, вызов пунктов меню и пр. если это позволяет архитектура Вашего приложения. В таком случае можно из терминала переключиться в режим измерения показателей для заданного измерения и по результатам выполнения получить необходимый результат.
SS(Name) ;Запись названия измерения
s ^%Perf(“SS”)=Name
q
Как вариант, можно включить вызовы в текст измеряемых программ, но при этом приходится вносить намного больше изменений в исследуемые программы.
Шаг 1 – сохраняем начальные показатели
SSbeg ;Фиксируем начальное значение
i $g(^%Perf(“SS”))]”” d
. n Info d JobInfo^%SS($j,.Info)
.s ^%Perf(“SS”)=^%Perf(“SS”)_”,”_$zdt($h)_”,”_$zh_”,”_$p(Info,”^”,7)
q
Шаг 2 – вычисляем изменение счетчиков
SSend ;Фиксируем разницу
i $g(^%Perf(“SS”))]”” d
.n Info,d d JobInfo^%SS($j,.Info)
.s d=^%Perf(“SS”)
.s $p(d,”,”,3)=$zh-$p(d,”,”,3)
.s $p(d,”,”,4)=$p($p(Info,”^”,7),”,”,1)-$p(d,”,”,4)
.s $p(d,”,”,5)=$p($p(Info,”^”,7),”,”,2)-$p(d,”,”,5)
.s ^%Perf(“SS”,$o(^%Perf(“SS”,” “),-1)+1)=d
.s ^%Perf(“SS”)=””
q
Работа утилиты проверялась на версиях Cache от 5.0.20 до 2008.1, но особенно актуальна для версии 5.0, где еще отсутствовали системные классы пакета %Monitor. Мы будем очень благодарны, если Вы сообщите нам о своих способах оптимизации приложений.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *