- PVSM.RU - https://www.pvsm.ru -
Предыстория (2008 г.)
По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH [1]) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.
Но, во-первых, процесс миграции на новую версию достаточно длительный, и некоторые заказчики продолжали использовать старые версии. А во-вторых, средства визуализации истории активных сессий от Oracle, которые имелись в наличии:
Из сторонних бесплатных средств, похожая функциональность была реализована в утилите ASHMON [2] за авторством Kyle Hailey. Но функционал был только для просмотра, и работала она под одну платформу – Windows.
В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.

Требования к приложению:
Ингредиенты:
Общая информация об ASH Viewer:
ASH Viewer предоставляет графический интерфейс для просмотра данных по активным сессиям. Программа периодически опрашивает сервер БД Oracle для получения списка активных сессий, сохраняет информацию в локальной базе данных, после чего данные визуализируются. Для версий до версии 10g база данных опрашивается один раз в секунду, для Oracle 10g и выше запрос информации из v$active_session_history и обновление графика происходят каждые 30 секунд.
Настройка и подключение:
Скачать дистрибутив [11], распаковать в отдельную директорию, добавить ojdbc6.jar [12] в lib директорию. Запустить ASHV.jar или run.com (run.sh), поправив пути к установленной Java на локальном компьютере. Подключение выполнять с помощью пользователя с привилегиями на просмотр таблиц и правами на исполнение pl/sql пакетов, необходимых для работы ASH Viewer-a — тут [13].
Для версии 10g и выше есть возможность включения эмуляции ASH. Данный режим подходит для баз, у которых не подключена платная опция Oracle Diagnostic Pack, или для Oracle в редакции Standard Edition. Для 9i, 8i версий выбираем Standard.

Интерфейс Top Activity:
Интерфейс идентичен странице Top Activity Oracle Enterprise Manager. Выделяем произвольный диапазон на графике и получаем данные по top активных сессий и SQL/PL/SQL-операторов. Есть возможность получить детальную информацию по запросу – текст запроса, планы выполнения:
– Напрямую из v$sql_plan (по различным plan_hash_value). Сделано для совместимости с предыдущими версиями СУБД Oracle;
– DBMS_XPLAN.DISPLAY_CURSOR. Из курсорного кэша. Планы выполнения по определенному sql_id;
– DBMS_XPLAN.DISPLAY_AWR. Планы исполнения из репозитория рабочей нагрузки, также по sql_id.
В настройках можно выставить автоматический режим, при котором программа самостоятельно обновляет top sql-сессий и процессов по заданному окну (по умолчанию – 5 минут последней активности сервера БД), количество SQL, PL/SQL операторов, по которым выбирается детальная информация из БД (запрос из v$sql) и возможность изменения масштаба представления графика Top Activity относительно количества процессоров (параметр сервера БД cpu_count). По выделенному диапазону можно получить ASH-отчет (аналогично тому выводу, который получаем через скрипт) через вызов API сервера БД – DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT

Интерфейс Detail:
Детализация по CPU Used и каждой группе событий ожидания. Работает аналогично интерфейсу Top Activity Oracle Enterprise Manager, только отсутствует автоматический режим. Также можно настраивать количество операторов, по которым выбирается детальная информация из v$sql, сохранение планов исполнения запросов в локальной базе и возможность изменения масштаба представления графика относительно количества процессоров в системе.

Интерфейс History:
На этой странице можно просматривать историю активных сессий, используя собранные данные из истории активных сессий Oracle. Навигация производится через интерфейс «Календарь». Также в интерфейсе «Календарь» можно выбрать диапазон дней и удалить его из локальный базы, чтобы освободить пространство на диске (например, в случае длительного сбора истории активных сессий). Работает offline режим, при котором можно запускать ASH Viewer только для просмотра архивных данных. Для получения более полной информации в архивном режиме рекомендуется собирать информацию в online в автоматическом режиме, иначе информация по sql-запросам будет доступна только в виде SQL ID/ HASH Value.

Прочее:
Варианты использования:
Полезные ссылки:
Страница проекта на SourceForge.net [11].
Страница проекта на GitHub [14].
Запись действий на экране в gif файл — ScreenToGif [15]
Утилита для нагрузочного тестирования баз данных — Hummerora [16].
Спасибо за внимание!
Автор: akardapolov
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/76902
Ссылки в тексте:
[1] Active Session History, ASH: http://www.oracle.com/technetwork/issue-archive/2013/13-jan/o13dba-1871177.html
[2] ASHMON: http://datavirtualizer.com/ash-masters/ashmon/
[3] Oracle Berkeley DB Java Edition v. 3.3.75.: https://ru.wikipedia.org/wiki/Berkeley_DB
[4] JFreeChart v. 1.0.12.: http://www.jfree.org
[5] ChartPanel: https://github.com/akardapolov/ASH-Viewer/blob/588fdd56984744735d76e5c4ec1e2da9b6970a7e/src/org/jfree/chart/ChartPanel.java
[6] E-Gantt v.0.5.3.: http://egantt.wikispaces.com
[7] SwingLabs Swing Component Extensions v. 0.9.5.: https://swingx.java.net
[8] Joda Time – Java date and time API v.1.6.: http://www.joda.org/joda-time
[9] Blanco SQL Formatter v. 0.1.1.: https://code.google.com/p/blanco-sql-formatter-pzc/
[10] jEdit Syntax Package v. 2.2.2.: http://syntax.jedit.org
[11] дистрибутив: http://sourceforge.net/projects/ashv
[12] ojdbc6.jar: http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html
[13] тут: https://github.com/akardapolov/ASH-Viewer/blob/master/user_privs.sql
[14] GitHub: https://github.com/akardapolov/ASH-Viewer
[15] ScreenToGif: https://screentogif.codeplex.com
[16] Hummerora: http://hammerora.sourceforge.net/index.html
[17] Источник: http://habrahabr.ru/post/245507/
Нажмите здесь для печати.