воскресенье, 29 ноября 2009 г.

Реальная практика: Oracle AWR html репорт в автоматическом режиме

Oracle и MSSQL Server это базы данных, которые наиболее часто используются в архитектуре комплексных программных систем(enterprise software) - СRM, ERP, BPM и.т.д.

В этом посте я покажу вам подход мониторинга базы данных oracle(релиз 11g) в автоматическом режиме используя пакет Automatic Workload Repository (AWR).

Итак, вкратце о том, что такое AWR. AWR - автоматический репозиторий рабочей нагрузки. Периодически(по умолчанию 1 раз в час) AWR создает статистическую копию показателей(счетчиков) и сохраняет информацию в таблицах расположенных в табличном пространстве SYSAUX. Механизм сбора статистической копии (называются эти копии AWR snapshots) установлен в релизах 10G и 11G по умолчанию и вам не нужно выполнять какие-либо действия для установки автоматического сбора информации. Снепшотам присваивается уникальный ID и они хранятся в базе данных на протяжении 7 дней и потом автоматически удаляются. Выглядит этот механизм так, будто база данных мониторит сама себя...и в принципе, так оно и есть.

Снепшоты это своего рода отправные точки(начало и конец), зная которые вы можете создать репорт для определенного отрезка времени. Для того, чтобы создать AWR html репорт вам нужно указать начальный и конечный снепшоты. В мануальном режиме с использованием OEM этот процесс выглядит как показано на рисунках:

1) Открываем домашнюю страницу AWR и кликаем кнопку "Run AWR Report":

2) Указываем начальный снепшот:

3) Указываем конечный снепшот:

4) Получаем html репорт, который содержит статистику в интервале между двумя снепшотами. Что собой представлеят AWR репорт вы можете посмотреть здесь. Информации в репорте достаточно, что воспринимается как должное принимая во внимание взрослость решений oracle. Единственное чего нету в репорте это графического представления трендов.

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

1) Автоматически создать снепшот перед запуском теста
2) Автоматически создать снепшот сразу же после завершения теста
3) Автоматически создать html репорт

Логично, что основные операции, которые доступны пользователю в GUI также можно выполнить в non GUI режиме. Для создания снепшота я буду использовать функцию AWR, которая создает снепшот и возвращает его ID(мне нужны будут эти ID в будущем для создания html репорта):

select dbms_workload_repository.create_snapshot() as snap_id from dual



ОК, с созданием снепшотов ситуация ясна.
Аналогично созданию снепшотов в пакете AWR существует функция для создания html репорта. Функция принимает параметрами следующие значения:

l_dbid - идентификатор базы данных
l_ins_num - номер инстанса базы данных
l_bid - ID начального снепшота
l_eid - ID конечного снепшота
l_options - оставляем значение по умолчанию(8)

Итак ID снепшотов я уже знаю как получить, нужно разобраться с параметрами l_dbid и l_ins_num. Немного телодвижений по документации oracle и ответ найден - эти параметры получу выполнив запрос следующего вида:

select d.DBID, i.instance_number as inst_num from v$database d, v$instance i



Складываем все в одно целое и выполняем функцию создания html репорта:

select output from table(dbms_workload_repository.awr_report_html(1070073306,1,3,4,8))

Cохраняем output как html документ и репорт готов.

Реализация соединения с базой и выполнение функций это уже, как говорится, вопрос техники. Например в ant это можно сделать используя sql task или java task и реализию вынести в java класс, или просто написать отдельный класс, что вам удобней.

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

Отправка комментария