понедельник, 24 декабря 2007 г.

Официальный перевод "Apex. Sizing Up Performance"

Около полугода назад я делал перевод статьи по оптимизации производительность Apex приложений - "Sizing Up Performance":


Теперь же есть возможность оценить ее официальный перевод :), ознакомиться с которым можно в декабрьском номере русской версии Oracle Magazine - "Оценка производительности".
Читаем, сравниваем....

Подробнее...

суббота, 22 декабря 2007 г.

Нужна ли сертификация по APEX?

David Peake, менеджер проекта APEX, активно прорабатывает вопрос создания программы сертификации по Oracle Application Express. И в настоящий момент проводит опрос о необходимость такого курса вообще.

Опрос состоит из нескольких экранов по 3-5 вопросов. Суть вопросов: направление проф. деятельности, используете ли APEX и в каком качестве и мнение насчет необходимости сертификации по APEX.

Исследование будет проводится до середины января 2008. Так что если есть желание оставить свое мнение - не откладывайте - времени осталось не много... ибо скоро НГ!!!
PS: с наступающими праздниками!!!

Подробнее...

вторник, 4 декабря 2007 г.

Запросы для получения ряда чисел

В некоторых случаях бывает необходимо получить последовательность чисел от N до M (в последнее время что-то уж очень часто возникает такая необходимость :). Дабы самому не забыть решил перечислить известные мне способы:

-- Самый простой
Select Rownum
From User_Objects
Where Rownum <= 25;

-- Кол-во единичек в CUBE - степень двойки
Select Rownum
From (Select 1 From Dual Group By Cube(1, 1, 1, 1, 1))
Where Rownum <= 25;

-- С использованием иерархичного запроса
Select Level
From Dual
Connect By Level <= 25;

-- Только для 10 версии и выше
Select y from dual
model
dimension by (1 as x) measures (1 as y)
rules iterate (25) (y[iteration_number + 1] = iteration_number + 1);


Есть есть еще какие-либо решения - будет интересно посмотреть...

Подробнее...

пятница, 23 ноября 2007 г.

APEX 3.1 доступен для тестирования

Буквально на днях команда Oracle Application Express анонсировала версию 3.1 для beta тестирования. Для того, чтобы получить доступ к тестовому инстансу, необходимо всего лишь зарегистрироваться.

Основная новинка - это интерактивные отчеты (Interactive Report Regions). Уже есть даже демонстрационная страничка от Dimitri Gielis - пример Interactive Report Regions.

Кроме того, для учета пожеланий/замечаний пользователей новой версии Apex, была создана страничка обратной связи.

Список новых фич:


  • Application Builder

    • Interactive Report Regions

    • Templates

      • Improve Searching of templates

      • Replace Templates

      • Publish Templates

      • Bulk Unsubscribe of templates

      • 2 New Themes

    • Wizards

      • Allow for early exit when creating HTML region

      • Create Interactive Report Wizard

      • Remove 32k limit on Create Application on a Spreadsheet

    • Addition of Application Groups

    • Simplification of Page Group pages

    • Addition of Application Date Format

    • Support for Declarative Media Type

    • Can view existence of run-only application (but cannot edit them)

    • Display Application Name in App Builder footer

  • Workspace Administration

    • Workspace-specific Builder Notifications

  • Runtime Installation

  • APIs

    • Augment APEX_MAIL API to support adding attachments to e-mails

Подробнее...

понедельник, 1 октября 2007 г.

Вывод ревизии subversion в приложениях Apex.

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

Далее будет рассматриваться ситуация, когда приложение Oracle Application Express находится под управлением системы контроля версиями Subversion и стоит задача вывести в интерфейс номер svn-ревизии приложения.

Теория
Суть решения заключается в использовании одной из функциональностей Subversion - Keyword Substitution, которая позволяет при сохранении изменений выполнять замены ключевых слов. То есть, в файле, находящемся под управлением Subversion, может выводиться информация о дате или авторе изменения, о номере ревизии и т.д.).

Решение поставленной задачи состоит из нескольких этапов:


  1. Объявить строку замены (Substitution String) в apex-приложении

  2. Изменить шаблон приложения таким образом, чтобы использовалась новая строка подстановки

  3. Включить функциональность Keyword Substitution для файла приложения в Subversion


Практика. Определение строки замены
Для того чтобы определить свою собственную строку замены, необходимо перейти в "Shared Components -> Application -> Definition":


где перейти в раздел "Substitutions" и добавить новую строку замены, например SVN_REV (значение этой строки важно и изменять его не следует - "$Rev $". Это связано с особенностями работы Subversion - см. документацию по Subversion. Keyword Substitution):


Теперь, если посмотреть файл экспорта приложения (как это сделать описывалось ранее), то можно увидеть приблизительно такие строки (можно найти поиском по фразе "svn"):

p_substitution_string_01 => 'SVN_REV',
p_substitution_value_01 => '$Rev: $',

То есть, значение строки подстановки в файле экспорта лежит в открытом виде, которое можно изменять как угодно. Это нам пригодиться.

Практика. Изменение шаблона
Для того чтобы вывести номер версии в GUI, необходимо изменить шаблон, который отвечает за общий вид формы. Для чего необходимо перейти в "Shared Components -> User Interface -> Templates" и выбрать шаблон страницы:




После этого, необходимо прописать в шаблоне созданную ранее строку подстановки "SVN_REV", например так:


Теперь при работе приложения в нижнем левом углу будет следующая картина:


Практика. Включение Keyword Substitution
Основная часть работы уже сделана. осталась малость - включить функцию "Keyword Substitution" для файла, в котором располагается описание нашего приложения. Допустим, файл нашего приложения называется "apex_app.sql". Тогда включение будет выглядеть так:

drive:\path\to\svn\repository\svn propset svn:keywords "Date Revision Author" apex_app.sql

Вот и все. Теперь при каждом сохранении очередной версии файла apex-приложения будет вместо "$Rev $" прописываться актуальная версия файла в Subversion-репозитариии. То есть, в каждом файле приложения будет лежать строка подстановки с актуальной версией файла.
То есть, картинка в левом нижнем углу должна быть приблизительно такой:


Таким же образом можно выводить и последнего автора изменений или дату последнего сохранения в репозитарии.

ps: прошу прощения за столь значительную задержку в публикациях, ибо после сезона отпусков случился аврал :(, что отрицательно сказалось на количестве свободных минут.

Подробнее...

понедельник, 23 июля 2007 г.

Изменения DBMS_SQL в Oracle 11g

Как уже говорилось ранее, объявлено о выходе новой версии Oracle. Соответственно, в сети появляется все больше и больше информации о нововведениях, идущих в одиннадцатой версии. Так, блуждая по сети, совершенно случайно наткнулся на новость о некоторых изменениях в спецификации пакета dbms_sql.
В небольшой заметке "Oracle 11G: describing a refcursor" говорится о двух новых методах пакета dbms_sql:

  • to_cursor_number, который преобразует refcursor в "dbms_sql cursor"(тот, что возвращает dbms_sql.open_cursor)

  • to_refcursor, который выполняет обратное преобразование, то есть, преобразует "dbms_sql cursor" в refcursor

Таким образом, теперь можно совместно использовать пакет dbms_sql и переменные типа Ref Cursor.

Подробнее...

среда, 11 июля 2007 г.

Релиз Oracle 11g

Свершилось! Состоялся релиз одиннадцатой версии Oracle. Соответственно, на OTN появилось много нового... Появилось много различных обзоров, среди которых стоит в первую очередь обратить внимание на:


О многих нововведениях уже было рассказано ранее, так что читаем, пробуем...

Подробнее...

пятница, 29 июня 2007 г.

Релиз Apex 3.0.1

Cегодня состоялся релиз Oracle Application Express 3.0.1! Это первая заплатка к Apex 3.0., в которой представлены следующие основные изменения:


  • Возможность прямой установки в Oracle Database XE (версия 3.0 такой возможности не предоставляла)

  • Поддержка миграции из Oracle Database XE в Oracle Standart/Enterprise Edition 10.2.0.3

  • Поддержка интеграции с Oracle SQL Developer 1.2

  • Включена поддержка конфигурации Apache FOP для использования в качестве сервера отчетов для печати PDF

  • Различные улучшения в стабильности и безопасности

Ознакомиться с процессом установки заплатки и ошибками, которые она исправляет, можно в "patch set notes". Кроме того, о различиях между версиями APEX 2.1 and 3.0.1, а так же об обновлении с 2.1 на 3.0.1 можно узнать из статьи "Oracle Database XE and Application Express 3.0.1"

Скачать заплатку можно отсюда.
ps: судя по сообщениям форума, установка новой заплатки уже идет полным ходом и весьма небезуспешно.

Подробнее...

понедельник, 25 июня 2007 г.

Oracle выпускает плагин для Eclipse

Совсем недавно Oracle присоединилась к Eclipse Foundation... и вот результат - выпущен Oracle Database Plugin, расширяющий возможности Eclipse Data Tools Platform (DTP).
Плагин предоставляет следующие возможности:

  • соединение с БД Oracle версий 9iR2 и выше

  • просмотр объектов БД и навигация по ним

  • выполнение хранимых процедур и функций

  • графическое и текстовое представление планов выполнения

Инсталляция плагина очень проста (как и любого другого плагина для Eclipse). Необходимо либо прописать "http://download.eclipse.org/datatools/updates" в меню "Help->Software Updates->Find", либо скачать архив с плагином и распаковать его в директорию Eclipse. Работать с новым плагином можно будет после перезагрузки.

Информацию об установке и основных функциях можно получить на OTN. Кроме того, на OTN появилась соответствующая ветка форума, где, правда, пока мало информации, но, думаю, в перспективе, это будет первоисточник путей решений проблем с новым плагином.

Подробнее...

среда, 20 июня 2007 г.

Oracle 11g гредет....

Oracle официально объявила о дате выпуска очередной версии СУБД - Oracle 11g. Это событие запланировано на 11 июля 2007 года и пройдет оно в Нью-Йорке. На конференции OpenWorld (в октябре прошлого года) представители Oracle пролили немного света на изменения, которые войдут в 11ый релиз. Как всегда, обещаются улучшения производительности, масштабируемости и т.д. Кроме того, была обещана новая технология компрессии данных, которая позволит значительно сократить размер БД, и механизм хранения неструктурированных данных... Но что же нас ждет на самом деле? Узнать более подробную информацию о нововведениях можно узнать как минимум в двух местах:


Как всегда, много всяких улучшений и новинок, наиболее интересными среди которых мне показались следующие:
  • Новый тип данных "simple_integer". Переменные это типа всегда NOT NULL и работа с ними выполняется быстрее, чем с переменными типа PLS_INTEGER.

  • Серверный пул соединений (server-side connection pooling). Позволяет нескольким клиентам использовать один и тот же пул сессий(должен совпадать USERID). Клиенты могут соединяться/отсоединяться с БД без затрат на создание серверной сессии.

  • Кэширование результатов запроса. Результаты SQL-запросов кэшируются. Размер кэша устанавливает DBA. Включается функциональность для таблицы следующей командой:
     alter table _ТАБЛИЦА_ cache results 

  • Виртуальные колонки (Virtual columns). Виртуальные колонки представляют из себя функции.Соответственно, индексы по таким колонкам являются индексами над функциями. В выражениях могут использоваться: колонки таблицы, константы, SQL-функции или функции, созданные пользователем. Поддерживается так же секционирование. Виртуальные колонки не могут использоваться в индексно-организованных (index organized) или внешних (external) таблицах. Прямая запись для таких колонок не возможна.

  • Ключевое слово "super" для объектно - ориентированных DDL. Новое ключевое слово используется в экземплярах производного типа (перегруженного) для того, чтобы сослаться на базовый класс, от которого текущий был унаследован.

  • Ключевое слово "continue" в циклах. Без комментариев... :)... давно пора.

  • Хранилище XML (XML data storage). Начиная с 11ой версии, XML можно хранить как CLOB или бинарный тип данных.

  • Автоматическое секционирование. Автоматическое создание секций.

  • Порядок срабатывания тригера. Можно указывать порядок выполнения тригеров.

  • Невидимые индексы (Invisible indexes). Вместо того, чтобы удалять индекс, если он более (или пока) не нужен, можно просто сделать его невидимым. В результате при выполнении SQL-запросов этот индекс использоваться не будет.

  • Создание и перестроение индекса в online (create and rebuild index online). Создание и перестроение индекса может выполняться при выполнении DML операции над таблицей. Ранее для этого требовалась эксклюзивная блокировка. Кроме того, перестроение индекса (rebuild) быстрее, чем удаление (drop) и создание (create) индекса.

  • Использование последовательностей в PL/SQL. Ранее, для того, чтобы получить следующее значение из последовательности (sequence.nexval) необходимо было использовать явный или неявный курсор (SQL). Теперь курсор более не нужен, и следующий код будет работать:
    v_val := Sequence.nexval;

  • Read-only таблицы. К таким таблицам не применимы DML-операции, а так же select for update. Перевод в данный режим таблиц выполняется следующей командой:
     alter table _ТАБЛИЦА_ read only 

... т.д. Список, естественно, не полный. Окончательный будет известен только после официального релиза. Ждем....

Подробнее...

пятница, 15 июня 2007 г.

Apex. Фиксируем габариты отчета.

Читая один из англоязычных блогов по Oracle Application Express, наткнулся на одну интересную хитрость.
Суть проблемы заключается в том, что для отчетов с большим количеством записей есть только 2 пути для отображения:


  • либо настраивать постраничный вывод (pagination)

  • либо показывать все записи и позволять пользователю скроллировать страничку


Автор предлагает третий вариант (своего рода, усовершенствование второго подхода) - зафиксировать габариты отчета и показывать все строки.
Фиксация габаритов очень проста - необходимо в настройках отчета прописать лишь:

  • в "Region Header": < div style="overflow: auto; height: 450px;"> , где вместо "450px" можно писать любую желаемую высоту отчета в пикселях.

  • в "Region footer": < /div >


А именно, необходимо найти описание отчета:

И прописать в соответствующие поля необходимые значения:


Результат, как всегда, можно посмотреть на apex.oracle.com

Подробнее...

воскресенье, 10 июня 2007 г.

Oracle SQL Developer 1.2

Вышла новая версия Oracle SQL Developer. Данная IDE становится все более привлекательной для разработчиков Oracle APEX в силу появления новых фич (анонсировалось в "Отчеты по Apex в SQL Developer" и "Apex и SQLDeveloper - интеграция продолжается").

Со списком новых функциональностей можно ознакомиться на сайте OTN - "Release Notes 1.2". Основными из них являются:


  • поддержка Oracle Application Express (некоторые отчеты, импорт / экспорт приложений)

  • поддержка миграции из сторонних баз данных в Oracle. Поддерживаются:

    • Microsoft Access: 97, 2000, 2002/XP, 2003

    • Microsoft SQL Server: 7, 2000, 2005

    • MySQL: 3, 4, 5

Подробнее...

вторник, 5 июня 2007 г.

Apex и SQLDeveloper - интеграция продолжается

Как уже упоминалось ранее, в последней версии Oracle SQLDeveloper появилась некоторая совместимость с Oracle Application Express. Как оказалось, это не последний шаг в интеграции!
На своем блоге, Крис Райс (принимает участие в разработке Oracle SQLDeveloper), озвучил несколько новшеств в грядущем обновлении. Они касаются экспорта/импорта приложений Apex. Ранее аналогичные манипуляции можно было выполнять только из самого Apex. Так же, Крис приводите несколько снимков, описывающих новшества:

Экспорт приложения:
export apex application

Импорт приложения:
import apex application

Настройки импорта:
apex application import option



Подробнее...

воскресенье, 3 июня 2007 г.

Развертывание приложений Apex : часть 2 (Import)

Продолжаем рассказ о развертывании приложений Oracle Application Express, начатый в заметке "Развертывание приложений Apex : часть 1 (Export)". После того, как приложение было экспортировано из Apex-репозитария на одном сервере, его необходимо проимпортировать в репозитарий другого сервера...

Импорт выполняется через "Application Builder"->"Import"->"Application", где необходимо указать путь к файлу, в котором находится описание импортируемого приложения, тип информации в файле и кодировку:
start to import apex application
Признаком успешного импорта файла в репозитарий является следующее сообщение:
success apex application import
Последним экраном импорта является описание установок развертывания приложения:
apex application deploy
,где:


  • Current Workspace - Название текущей рабочей области

  • Export File Workspace - Название рабочей области импортируемого файла экспорта

  • Export File Workspace ID - Идентификатор рабочей области импортируемого файла экспорта

  • Export File Application ID - Идентификатор приложения в импортируемом файле экспорта

  • Export File Version - Версия файла экспорта

  • Export File Parse As Schema - В рамках какой Oracle схемы выполнялся экспорт файла

  • Application Origin - Происхождение приложения

  • Parse As Schema - В рамках какой Oracle схемы будет выполнять разбор файла экспорта

  • Build Status - Статус приложения после импорта. "Run Application Only" - с приложением можно только запускать на выполнение. "Run and Build Application" - приложение можно как выполнять, так и изменять

  • Install As Application - Идентификатор для нового приложения. "Auto Assign New Application ID" - автоматическое присвоение нового значения для ID приложения. "Reuse Application ID ... From Export File" - использование того ID приложения, который был у него во время экспорта. "Change Application ID" - изменить ID приложения вручную.

Все загруженные файлы хранятся в отдельном репозитарии, посмотреть который можно в "Application Builder" -> "Export Repository". То есть, даже если после развертывания приложение было удалено по каким - то причинам, его можно по-новой развернуть на сервере без повторного испортирта файл.
Кроме возможности развертывания приложения, в репозитарии есть функция удаления файлов импорта. И если уж сам файл удален из репозитария, то для импорта приложения необходимо будет снова выполнить импорт файла на сервер.

Если вдруг, во время установки приложения появилось сообщение:

This page was exported from a different application or from an application in different workspace.
Page cannot be installed in this application.


то необходимо проверить, что ID рабочей области (Workspace ID), откуда экспортировалось приложение, отличается от ID рабочей области, куда приложение устанавливается. В этом случае, надо просто изменить его в файле экспорта на значение Workspace ID, куда устанавливается приложение. Для этого, необходимо найти в начале файла экспорта следующую строку:
wwv_flow_api.set_security_group_id(p_security_group_id=> _Число_);

И заменить "_число_" на значение "Workspace ID", куда устанавливается приложение. Если вы его по каким-либо причинам его не знаете, то просто экспортируйте что-нибудь из этой рабочей области и в начале файла экспорта, в той же строке, будет нужный идентификатор. То есть, приложения должны переноситься между серверами только в рамках одной и той же рабочей области.

В заключении надо сказать, что Oracle Application Express позволяет экспортировать/импортировать не только приложение, но и отдельные его части: страницы , темы оформления, значения по умолчанию, CSS и т.д. В случае экспорта страницы из приложения, необходимо учитывать так же, что на новом сервере должны совпадать не только ID рабочей области, но ID приложения (документация на OTN).

Подробнее...

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

Развертывание приложений Apex : часть 1 (Export)

Как правило, процесс разработки ПО идет по следующему сценарию: Разработка (development) -> Тестирование (testing) -> Заказчик (deploy). То есть, в начале разрабатывается приложение в соответствии с заявленными требованиями, потом выполняется проверка на соответствие этим требованиям и заключительным этапом является развертывание приложения на стороне заказчика. При этом, на втором и третьем этапе необходимо развернуть приложение на новой площадке (для чистоты эксперимента). В Oracle Application Express этот процесс максимально автоматизирован (чему, в основном, способствует именно архитектура Apex - когда, вся информация о приложении хранится в БД).

Суть процесса хорошо описана в документации и заключатеся в том, что Apex позволяет экспортировать всю необходимую информацию о приложении в файл и, соответственно, есть возможность импорта этого файла. Сам файл представляется из себя простой текст с DML операциями.

Для того, чтобы экспортировать приложение, необходимо перейти в приложение и выбрать "Export/Import"->"Export"->"Application":

start to export apex application

После чего, появится диалог экспорта приложения:

set apex application export settings
Где:


  • Application - идентификатор и название экспортируемого приложения

  • File Format - тип форматирования строк в файле: DOS/UNIX style

  • Owner Override - пользователь, для которого будет в дальнешем импортировано приложение. Если не указано, то текущий

  • Build Status Override - статус приложения после дальнейшего импорта. "Run Application Only" - приложение можно только запускать на выполнение. "Run and Build Application" - приложение можно как выполнять, так и дорабатывать

  • Debugging - возможность использования встроенной отладки после дальнейшего импорта приложения

  • Export Supporting Object Definitions - необходимость включаения в файл экспорта определения объектов БД, которые используются в приложении

  • Export Comments - необходимость экспорта комментариев

  • As of - экспорт приложения по состоянию на указанное количество минут назад (используется функциональность пакета DBMS_FLASHBACK)

  • File Character Set - кодировка, в которой выполняется экспорт

Результатом будет sql-файл, который можно проимпортировать на другой площадке.
О том, как выполнять импорт файла приложения и о возможных "непонятках", которые могут возникнуть в процессе импорта, будет рассказано в одной из следующих заметок...

Подробнее...

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

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

Заканчиваем перевод статьи Sizing Up Performance, начатый в постах "Повышаем производительность (часть 1)" и "Повышаем производительность (часть 2)".

Оптимизация элементов страниц
Другими общедоступными возможностями настройки производительности приложений Oracle Appliccation Express являются такие элементы, как процессы(Page processes), вычисления(computations),авторизация(authorizations), валидация(validations) и условия (conditions). Производительность этих элементов на странице должна быть очевидной при работе приложения в режиме отладки (debug mode). Ниже приведены рекомендации для этих элементов страницы:

Устанавливайте момент запуска процесса на уровне страницы (page processes) - один на страницу (per-page), а не на сессию. Если же используется процесс на уровне приложения (application-level processes) , то можно установить момент запуска - один на сессию (per session) или на показ страницы (page view). Имейте в виду, что использование опции по сессионного старта процесса уровня приложения, может повлиять на отображение всех страниц приложения.

Оптимизируйте составляющие нулевой страницы (особенности этой страницы описаны здесь). Компоненты этой страницы отображаются на каждой странице приложения, поэтому стоит уделить особое внимание оптимизации логики именно этой страницы. Объединяйте различные PL/SQL блоки в пакеты, то есть, если на странице есть большие PL/SQL блоки, то лучше перенести эти блоки в PL/SQL пакет и вызывать его из приложения.

Используйте декларативные условия. Такия условия быстрее, чем динамический SQL или PL/SQL-условия. Например, использование условие типа "Item=Value" будет быстрее, чем использование PL/SQL-выражения ":ITEM=value."

Для отчетов, содержащих большое количество строк, лучше использовать нумерацию страниц типа "Rows X to Y". Нумерация типа "Rows X to Y of Z" занимает больше времени на выполнение, чем простая нумерация типа "Rows X to Y". Например, если в отчете, содержащем 900 строк, используется нумерация типа "Rows X to Y of Z", Oracle Application Express будет должен выполнить полную выборку данных, чтобы установить количество строк. А при использовании нумерации типа "Rows X to Y", будет необходимо выбрать только Y + 1 строку.

Выводы

Использование представленного материала, поможет оценить производительность и масштабируемость приложений Oracle Application Express. Если производительность приложения оставляет желать лучшего, то использование выше представленных подсказок поможет установить самые медленные страницы и определить на них плохо реализованные компоненты. Используя данную информацию, можно будет гарантировать, что ваши приложения Oracle Application Express будут соответствовать заявленным требованиям по производительности.

Подробнее...

среда, 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 для проффесионалов").

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

Подробнее...

суббота, 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 милисекунд или менее.

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

Подробнее...

вторник, 15 мая 2007 г.

Отчеты по Apex в SQL Developer

В одной из последних версий SQL Developer были добавлены несколько отчетов для Application Express. Таким образом, теперь есть возможность просматривать некоторую информацию об Apex приложениях прямо из IDE (хотя доступ к ней был и раньше, так как всегда были общедоступные взгляды APEX_%, но теперь не надо будет писать даже запросов :).

sqldeveloper apex reports

Однако, доступ к функциональности будет только с версии Apex 3.0.1, а пока будем получать:
sqldeveloper message about apex version

Но, по слухам, осталось ждать не долго :)... поговаривают, что уже в конце мая-начале июня должен появиться новый патч для Apex.

Подробнее...

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

Установка значений Apex переменных (session state) из PL/SQL кода

Как уже было продемонстрировано в ряде примеров, а так же не плохо описано в документации, в Oracle Application Express установка/получение значения переменнной сессии выполняется следующим образом:


:PN_ITEM_NAME := 'item_value'; -- установка значения
:PNN_ITEM_NAME := :PN_ITEM_NAME; -- установка и чтение значения


Однако в коде хранимых процедур такой подход не допустим. Как же в таком случае получить или установить значение Apex-переменной их хранимого на сервере PL/SQL кода? Все очень просто:

  • для чтения значения переменной необходимо использовать синтаксис - v('PN_ITEM_NAME')
  • для установки значения переменной необходимо пользоваться методом пакета APEX_UTIL:

    ...
    APEX_UTIL.set_session_state(
    p_name => ‘PN_ITEM_NAME’,
    p_value => ‘item_value’);
    ...


Вот так вот, не смотря на подробнейшую документацию, все таки остаются темные пятна :).

Подробнее...

вторник, 8 мая 2007 г.

Firefox + Firebug = Apex IDE

Если вы занимаетесь разработкой Web-приложений (в том числе и Oracle Application Express), то Вам просто необходимо знать о существовании такого расширения для Firefox'a как FireBug . Это расширение из разряда "must have", так как предоставляет все основные функции, необходимые для отладки приложений (и даже больше :).

Вот лишь часть функций:


  • отладка JavaScript (точки останова, просмотр значения переменных, стэк и т.д. )

  • анализ CSS

  • анализ HTML

  • анализ DOM

  • монитор сетевой активности

и т.д.
Скачать можно как с сайта Mozilla.org, так и с домашней страницы проекта - getfirebug.com, где так же можно найти описание основных функций.

Подробнее...

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

Подсветка выбранной строки в отчетах Apex.

В состав Oracle Application Express входит ряд шаблонов для отчетов, но, к сожалению, ни одни из них не предоставляет функциональности подсветки выбранной строки. Оказывается исправить эту несправедливость не так уж и сложно... Для этого достаточно лишь немного скорректировать шаблон отчета. Что такое шаблон отчета и зачем он нужен хорошо описано в документации по Apex.

Итак, заходим в репозитарий шаблонов apex приложения, расположенный в "Shared Components"->"User Interface"->"Templates":
apex application report templates
Далее, создаем точную копию любого шаблона (копию делаем для того, чтобы в отчетах, которые уже используют этот шаблон не изменили своего поведения). В наше случае возьмем за основу стандартный шаблон отчета:
apex report remplates
Даем название для нового шаблона - "Standard (highlight row)".
apex naming for new report template
Далее, переходим к редактированию нового шаблона:
edit apex report templateПереходим к блоку "Column Templates" шаблона, где предоставляется возможность использовать все свои знания HTML :).
Добавляем в блоке "Column Template 1" строку " style="background-color:#CCCCCC" ", чтобы обозначит цвет фона для конкретной строки отчета. Далее, необходимо описать условия, при которых строка будет иметь указанный цвет фона. Для этого, в блоке "Column Template 1 Condition" выбираем значение "Use Based on PL/SQL Expression", а в блоке "Column Template 1 Expression" прописываем: " '#OBJECT_TYPE#' = :P1_TYPE ". Таким образом, у строки отчета будет отличный цвет фона только в том случае, если значение в колонке OBJECT_TYPE совпадает со значением, прописанным в невидимом поле P1_TYPE (происхождение и назначение этого поля можно узнать из этого топика про Master-Detail):
apex report template propertyКроме всего прочего, в блоке "Column Template 2" прописываем стандартное значение. Этот шаблон будет применяться для всех тех строк отчета, для которых не отработал первый шаблон. Далее, очищаем поле "Background color for checked row", так как цвет фона мы уже прописали в первом шаблоне, а так же в поле "Background color for current row" прописываем значение "#EEEEEE", тем самым отчет будет подсвечивать строку, над которой сейчас находится указатель мыши пользователя:

set current row color in apex report templateДалее, переходим к описанию отчета, для которого хотим применить новый шаблон:

choose report to apply new teplate in apex application
Переходим в блок "Layout and Pagination" в выпадающем списке "Report Template" выбираем название ранее созданного шаблона - "template: 17. Standard (highlight row)":
set new template for report in apexВот и все дела... Работу описанного выше приложения можно, как всегда, посмотреть на apex.oracle.com.

Подробнее...

вторник, 1 мая 2007 г.

Добавляем поиск и подсветку в отчет Oracle Application Express.

Зачастую в приложениях, работающих со значительными объемами данных, необходим такой функционал как поиск. К сожалению, Oracle Application Express не предоставляет таких встроенных средств (как, например, Oracle Forms). Поэтому его (функционал поиска) необходимо реализовывать в ручную.
Продолжая развивать созданное ранее приложение, добавим к нему возможность поиска и подсветки результатов. Для этого необходимо зайти в главную страницу приложения и добавить регион, в котором будут содержаться элементы интерфейса для работы с поиском:
Добавляем простой HTML-регион:


Выставляем заголовок для региона - "Поиск" и номер последовательности выбираем такой, чтобы номера всех остальных регионов приложения были больше. Таким образом, мы сообщаем Apex'у о том, что создаваемый регион необходимо выводить на странице самым первым:
Источник оставляем пустым:
В результате, видим новый регион:
Следующим шагом будет добавление непосредственно строки поиска и кнопки обновления страницы. Добавляем строку поиска - это будет новый Item:
Тип элемента - простое текстовое поле:
Указываем имя элементу и регион, к которому он будет относиться:
Далее, указываем заголовок строки поиска:
И выставляем источник элемента - "не вычисляемый":
Далее, необходимо добавить кнопку, которая будет сообщать приложению о необходимости обновить страницу с учетом введенной строки поиска:
Указываем, к какому региону будет принадлежать новый элемент интерфейса:
Указываем, что кнопка должна располагаться внутри региона, а не за его пределами:
Указываем наименование новой кнопки, текст, который будет выведен на ней и шаблон, в соответствии с которым сам контрол будет выводиться на странице:
Далее, добавим подсказку для строки поиска, для этого необходимо перейти к описанию соответствующего элемента интерфейса:
Перейти в секцию "Help" и ввести текст подсказки:
Далее, необходимо изменить регион отчета таким образом, чтобы он учитывал строку поиска. Для этого необходимо перейти к описанию региона:
И в секции "Source" изменить текст запроса:
Далее, необходимо указать приложению на какую страницу необходимо навигироваться после нажатия кнопки поиска. Для этого необходимо создать новый "Branch":
Указываем, что будем переходить на страницу:
Указываем номер страницы:
Кроме того, указываем, что переходить нужно только в том случае, если была нажата кнопка поиска:
И, завершающим штрихом, добавляем подсветку результатов поиска. Для этого переходим в описание отчета:
Переходим к описанию того поля, по которому будет выполняться поиск:
И указываем в поле "Highlight Words" наименование того поля, в соответствии со значением которого, необходимо выполнять подсветку:
Вот и все...
Работу приложения, как всегда можно проверить на apex.oracle.com.

Подробнее...