Оценка производительности (Sizing Up Performance, by Mike Hichwa)
APEX 15.03.2009Советы и методики для обеспечения оптимальной производительности Oracle Application Express
По мере того, как Oracle Application Express становится все более популярным, многие пользователи просят помощи и руководства при оценке и настройке его производительности. В этой колонке я покажу вам быстрый и удобный способ оценки его производительности и установления параметров. Я также продемонстрирую, как идентифицировать проблемы с производительностью и справляться с ними. Ниже приводится перечень некоторых из наиболее часто задаваемых вопросов, на которые я постараюсь ответить в этой колонке:
- Сколько аппаратных средств и, в частности, сколько процессоров понадобится для того, чтобы справиться с заданной рабочей нагрузкой?
- Сколько пользователей может поддерживать приложение?
- Как можно определить, где именно могут возникнуть “узкие места” производительности?
Давайте, начнем с некоторой предыстории.
Понимание производительности приложений Oracle Application Express
Ключом к оптимальной производительности для большинства приложений Oracle Application Express должно стать поддержание относительно короткого среднего времени формирования страницы. Масштабирование здесь линейное: например, приложение, для которого среднее время формирования страницы равно 10 миллисекундам (ms), будет в состоянии обработать приблизительно в 10 раз больше параллельных пользователей, чем приложение со средним временем формирования страницы, равным 100 ms.
Вы можете использовать статистические показатели производительности, собираемые Oracle Application Express, чтобы без труда аппроксимировать, насколько хорошо масштабируется приложение Oracle Application Express. Статистические данные по производительности можно найти на странице Monitor Activity. Если предположить, что приложение хорошо настроено и содержит эффективные SQL-операторы и PL/SQL-блоки, то единственным и самым важным фактором, влияющим на параметры, остается центральный процессор.
Предположим, например, что вы разрабатываете приложение Oracle Application Express, которое обязано поддерживать формирование 1 000 страниц в минуту. Для системы с двумя процессорами такое приложение должно обеспечивать формирование 500 страниц в минуту для каждого из процессоров, то есть формирование 8,33 страницы в секунду для каждого из процессоров. Требование соответствия этому условию диктует, что среднее время формирования приложением страницы не должно превышать 120 ms.
Зависимость между числом доступных процессоров и необходимым числом формируемых в минуту страниц приводит к среднему времени отклика на страницу, которое может быть выражено следующим уравнением:
(N*60) =A
P
где:
- N – число центральных процессоров,
- P – число запросов в минуту на формирование страницы,
- A – это среднее время отклика на страницу.
Используя это простое уравнение, можно аппроксимировать среднее время формирования страницы, необходимое для поддержания формирований заданного количества страниц в минуту. Изменяя число процессоров или число формирований страницы в минуту, вы можете установить четкие цели по производительности для приложения.
Среднее время формирования страницы приложения может также помочь предсказать, какое воздействие окажет изменение размеров пользовательского сообщества, если оно начнет расти. Для того, чтобы определить, сколько пользователей может поддержать приложение, следует начать с определения числа запросов к странице в течение заданного периода времени.
Например, если для выполнения среднего сеанса, включающего формирование 50 страниц, требуется 10 минут, это означает, что для типичного сеанса приложение поддерживает формирование 5 страниц в минуту. Если задать параметры приложения, которые позволят формировать по 1 000 страниц в минуту, то приложение сможет поддерживать до 200 параллельных пользователей за сеанс.
Экстраполируя эти данные, чтобы аппроксимировать ежедневное пользовательское сообщество, давайте затем предположим, что все пользователи находятся в одном и том же часовом поясе, и что каждый пользователь в среднем за восьмичасовой рабочий день выполняет два сеанса, что приводит к формированию 100 страниц (2 * 50 просмотренных за сеанс страниц). Поскольку вы устанавливаете параметры приложения для формирования 1 000 страниц в минуту, умножьте число содержащихся в восьми часах минут (480) на число страниц, формируемых в течение одной минуты (1 000), чтобы определить, что приложение за восемь часов может поддержать формирование 480 000 страниц, или обслужить 4 800 пользователей.
Предлагаю эмпирическое правило: вы должны измерить параметры для самого нагруженного часа, потому что в часы пик приложение должно обслуживать формирование 1 000 страниц в минуту, хотя на протяжении всего дня оно обслуживает формирование только 100 страниц в минуту.
Еще одно эвристическое правило: вы должны гарантировать 300 миллисекунд, или даже меньше, как среднее время формирования страницы. Для крупномасштабных приложений со многими сотнями и даже тысячами параллельно работающих пользователей, целью должно быть среднее время формирования страницы 150 миллисекунд, или даже меньше.
Обнаружение и устранение узких мест
Накладные расходы, связанные с генерацией представления страницы в Oracle Application Express, являются до известной степени статическими. Любая другая обработка созданного разработчиком кода SQL и PL/SQL в приложениях Oracle Application Express является дополнением к этим статическим накладным расходам.
Затем, используя опцию Oracle Application Express Monitor Activity, можно без труда идентифицировать в приложении наиболее плохо выполняющиеся (poorest-performing) страницы (см. рис. 1).

Рисунок 1: Формирование страниц в соответствии с отчетом о взвешенной производительности страниц, имеющимся в Monitor Activity
После того как были идентифицированы наиболее плохо выполняющиеся страницы, их можно исследовать в режиме Debug, запустив приложение и кликнув по ссылке Debug (Отладка) на инструментальной панели разработчика. Режим отладки предоставляет страницу одновременно с синхронизирующей информацией – можно увидеть временные коды, соответствующие определенным действиям Oracle Application Express, а также дополнительные детали об именах элементов, вычислениях и точках обработки.
Идентифицируя в выходных данных отладки сильные скачки в общем затраченном времени, можно найти наиболее плохо выполняющиеся элементы страницы. Вот, например, отрывок из отчета о странице, сгенерированной в отладочном режиме:
. . . 0.05: Region: Projects 0.06: Show report 0.06: Determine column headings 0.06: Activate sort 0.07: Parse query as: MIKE1 0.07: Binding: ":P24_SEARCH"="P24_SEARCH" value="" 0.07: Print column headings 0.07: Rows loop: 15 row(s) 0.18: Region: Icon View . . .
Обратите внимание на скачок с 0,07 секунд до 0,18 секунд затраченного времени. Этот скачок указывает, что для выполнения запроса потребовалось 0,11 секунды, что для этого примера составляет большой процент от полного времени, требующегося для генерации страницы, а это означает, что запрос является превосходным целевым объектом для настройки производительности.
Настройка SQL
Самой часто встречающейся областью настройки являются SQL- операторы. Механизм Oracle Application Express проводит фазу синтаксического анализа, фазу связывания, выполняет оператор и выбирает результаты SQL для области составления отчетов. Во всех возможных случаях используйте переменные связывания, чтобы избежать ненужного синтаксического анализа и способствовать многократному использованию общедоступных SQL-операторов в Oracle Database.
В дополнение к этому, убедитесь, что для запроса используется оптимальный план выполнения запроса. Используйте команду Explain Plan из меню SQL Commands, чтобы с легкостью генерировать планы для конкретных запросов.
Для тщательного исследования каждого элемента SQL и PL/SQL для конкретной страницы можно активировать трассировку SQL-предложений для всего представления страницы. При включенной SQL-трассировке на сервере генерируется файл трассировки, который можно проанализировать с помощью утилиты Oracle TKPROF. (См. раздел “Отладка приложения” в книге Oracle Application Express User’s Guide (“Руководство пользователя Oracle Application Express”) для получения дополнительной информации об использовании TKPROF в Oracle Application Express.)
Настройка элементов страницы
К числу других часто встречающихся возможностей для настройки в приложениях Oracle Application Express можно отнести страничные процессы, вычисления, авторизации, проверки правильности и состояния. Эффективность этих элементов на странице должна стать очевидной, когда приложение выполняется в режиме Debug. Ниже приводятся некоторые рекомендации для этих элементов страницы:
Задайте выполнение страничных процессов на постраничном уровне, а не на уровне сеанса. Если процессы используются на уровне приложения, вы можете задать выполнение процесса один раз за сеанс или для каждого формирования страницы. Имейте в виду, что использование опции сеансового показа для процесса уровня приложения может затронуть формирование всех других страниц в приложении. Плохо выполняющийся на уровне приложения процесс может затронуть формирование каждой страницы в приложении.
Оптимизируйте компоненты нулевой страницы. Компоненты нулевой страницы формируются на каждой странице, так что примите специальные предосторожности, чтобы оптимизировать всю логику нулевой страницы. Объедините многочисленные блоки PL/SQL в пакеты. Если вы пишете на странице большие блоки PL/SQL, объедините их в пакеты PL/SQL, которые будут затем вызываться из приложения.
Используйте декларативные условия. Декларативные условия работают быстрее, чем условия динамического SQL и PL/SQL; к примеру, использование условия «Item=Value» срабатывает быстрее, чем использование выражения PL/SQL «:ITEM=value».
Для отчетов, которые возвращают много строк, используйте разбиение на страницы (пагинацию) типа «Строки от X до Y». Для пагинации «Строки от X до Y из Z» требуется больше времени, чем для простой пагинации «Строки от X до Y». Если для отчета, состоящего из 900 строк, использовать пагинацию «Строки от X до Y из Z», то Oracle Application Express будет должен сначала выбрать все строки, чтобы получить полное значение счетчика строк. А при использовании пагинации «Строки от X до Y» механизм составления отчетов должен выбрать только Y + 1 строку.
Заключение
Использование предлагаемых в этой колонке рекомендаций для задания параметров поможет вам оценить производительность и масштабируемость приложений на базе Oracle Application Express. Если вы не слишком довольны производительностью приложения, используйте эти указатели, чтобы локализовать самые медленные страницы, а затем идентифицировать плохо выполняющиеся компоненты этих страниц. Обладая такой информацией, можно гарантировать, что приложения Oracle Application Express оправдывают надежды производительности.
Источник: журнал: «Oracle Magazine», #1, 2007, http://www.oracle.com/technology/oramag/oracle/07-jan/o17browser.html