суббота, 19 мая 2007 г.

Повышаем производительность (часть 1)

Листал на днях Oracle Magazine, и наткнулся на давольно интересную статью про оценку прозводительности приложений Apex. После беглого просмотра обратился к русской редакции данного журнала и, к своему удивлению, обнаружил, что перевода ее нет :(. После недолгих раздумий решил исправить положение :)...

Советы и методы для оптимальной производительности Oracle Application Express
В силу того, что Oracle Application Express становится все более популярным, все больше пользователей ищут руководства по настройке производительности для Apex приложений. Ниже будет продемострирован быстрый и удобный способ для оценки и изменения производительности. Так же будет продемонстрировано, как идентифицировать и решать проблемы производительности. Ниже перечислены наиболее общие вопросы, которые будут освещены:


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

  • Какое количество пользователей будет поддерживать приложение

  • Как локализовать узкие места в производительности


Понимание понятия "производительность" в приложениях Oracle Application Express
Ключ к оптимальной производительности для большинства приложений Oracle Application Express заключается в том, чтобы сохранять среднее время отображения страницы относительно небольшим. Масштабирование линейно: приложение со среднем временем вывода страницы в 10 милисекунд может быть вызвано в 10 раз больше конкурирующими пользователями, чем приложение со среднем временем вывода страницы в 100 милисекунд.
Для беглой оценки производительности приложений Apex, можно использовать статистику собранную Apex'ом, информация о которой доступна на странице "Monitor Activity". Если предположить, что приложение хорошо оптимизировано, включая эффективный SQL и PL/SQL, то самым важным изменяемым фактором является количество процессоров (CPU).
Например, предположим, что разрабатывается приложение, которое должно обеспечивать 1000 показов страниц в минуту. Для системы с двумя процессорами, приложение должно обеспечивать 500 показов страниц в минуту на один процессор или 8.33 показа в секунду/процессор. Для того, чтобы удовлетворить этим требованиям, необходимо, чтобы среднее время вывода страницы не превышало 120 милисекунд.
Отношение между доступным числом процессоров и требуемым числом показов страниц в минуту, выраженное в среднем времени отклика на страницу, может быть отражено с помощью следующей формулы:

(N*60)
------ = A
P

, где:

  • N - количество процессоров

  • P - количество показов страниц в минуту

  • A - среднее время отклика на страницу


Используя это простое уравнение, можно выполнять оценку среднего времени отображения страницы для обеспечения заданного числа показов страниц в минуту. Изменяя число процессоров или количество показов страниц в минуту, можно установить четкие целевые показатели для приложения.
Кроме того, среднее время отображения страницы может помочь в предсказании влияния изменения размера пользователей, то есть, для того, чтобы определить количество пользователей, которое может обеспечивать приложение, начиная с первого определения количества запросов страниц в течение определенного периода времени.
Например, если средняя сессия, включающая 50 показов страниц, занимает 10 минут,а приложение поддерживает отображение пяти страниц в минуту для обычной сессии, то если приложение масштабируется для обеспечения 1000 показов страниц в минуту, то приложение будет поддерживать 200 одновременных пользователей на сессию.
Если экстраполировать эти данные для оценки количества ежедневных пользователей, то давайте так же считать, что все пользователи находятся в одном часовом поясе и, что в среднем каждый пользователь использует две сессии в один восьмичасовой рабочий день, в результате чего имеем 100 страниц (2 * 50 страниц в сессии). Поскольку приложение масштабируется на 1000 показов страниц в минуту,то умножим число минут в восьми часах (480) на страницы в минуту (1000), чтобы определить, что приложение может обеспечивать 480000 показов страниц на каждые восемь часов, или 4800 пользователей.
Как правило, приложение необходимо масштабировать для самого загруженного часа, так как нагрузка может быть 100 страниц в минуту в течение дня, а может быть и 1000 просмотров страниц в минуту в час пик.
Другое правило состоит в том, что необходимо обеспечивать среднее время показа страницы 300 милисекунд или менее. Для высоко производительных приложений, с многими сотнями или тысячи пользователей, необходимо стремиться к среднему времени показа страницы 150 милисекунд или менее.

... продолжение следует...

1 комментарий:

Yuri комментирует...

Обнаружил 2 фактора, разрушающих "линейность"
1) на APEX версий < 3, айтемы, что вычисляются на фазе рендеринга страницы, сохраняются, и после каждого сохранения появляется commit. Очень похоже на commit в цикле (отчетливо видно в трассировке 10046). К сожалению не дошли руки проверит это на APEX версии 3.
В моем случае диски где находились online redo использовались еще и для других целей, потому проблема была очень отчетливой

2) на базе 10.2.0.1 в комбинации, надо полагать, с FGAC, была дичайшая конкуренция за защелки на больших нагрузках. Во времени отклика - latch wait составляло 99%.