среда, 23 мая 2007 г.

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

Продолжаем перевод статьи Sizing Up Performance о проблемах производительности в приложениях Oracle Application Express, начатый в предыдущем посте.

Поиск и устранение узких мест
Накладные расходы, связанные с созданием страницы в Apex, довольно статичны. Время потраченное на обработку SQL или PL/SQL кода, созданного разработчком, добавляется к тому, которое было использовано для генерации страницы. Используя "Monitor Activity", можно легко определить наихудшие по производительности страницы приложений:

Monitor Activity feature of Oracle Application Express

После того, как определена самая медленная страница приложения, можно изучить ее в режиме отладки, нажав ссылку "Debug" в панели инструментов разработчика.

Debug link in the Oracle Application Express Developer Toolbar

В режиме отладки, отдновременно с выводом самой страницы, выводится и информация о затраченном на вывод времени: отражаются временные интервалы, соответствующие конкретным действиям 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-запросов отчетов. Использование связанных переменных (bind variables) везде, где это возможно, избавляет от ненужного разбора и способствует повторному использованию планов SQL-запросов.

Кроме того, необходимо убедиться, что для запроса используется оптимальный план. Для генерации плана запроса можно использовать "Explain Plan" в окне "SQL Commands".

Для более тщательного изучения каждого фрагмента SQL или PL/SQL кода на каждой странице, можно включить для нее SQL-трассировку. SQL-трассировка сгенерирует трейс файл на серевере, который можно будет проанализировать Oracle утилитой - TKPROF. (более подробную информацию об использовании TKPROF в Oracle Application Express можно найти в разделе Debugging an Application в "Oracle Application Express User's Guide")
(прим. автора - подробнее о связываемых переменных, планах выполнения, жестком/мягком разборе запросов и трассировке можно почитать в книге Т.Кайта "Oracle для проффесионалов").

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

Комментариев нет: